После рефакторинга запроса появляются индексы, поэтому из сообщения @ eric следует:
credit_request
:
Вы присоединяетесь к этому requestor
на request_id
, который я надеюсь, является уникальным.В предложении where у вас есть условие для evaluator_id
и выберите client_app_id
и personal_flg
в запросе.Таким образом, вам, вероятно, нужен уникальный индекс для credit_request
из (request_id, evaulator_id, client_app_id, personal_flg
.
Помещая выбранные столбцы в индекс, вы избегаете by index rowid
, что означает, что вы выбрали свои значения из индекса, а затем снова вошли в таблицу, чтобы получить дополнительную информацию.Если эта информация уже есть в индексе, то в этом нет необходимости.
Вы присоединяете ее к evaluator
на evaluator_id
, который включен в первый индекс.
requestor
:
Это присоединяется к request_id
, и ваше предложение where включает soc_sec_num_text
, lower(first_name_txt)
, lower(last_name_txt)
и birth_dt
.Итак, вам нужен уникальный, если возможно, индекс для (request_id, soc_sec_num_text)
, потому что или это еще более сложно, потому что у вас действительно должен быть индекс для максимально возможного числа условий.Вы также выбираете requestor_type_iud
.
В этом случае, чтобы избежать функционального индекса со многими столбцами, я бы индексировал (request_id, soc_sec_num_text, birth_dt )
, если у вас есть пространство, время и наклон, то добавление lower(first_name_txt)... etc
к этому может улучшить скорость в зависимости от того, какСелективный столбец есть.Это означает, что, если, например, значений намного больше, first_name_txt
, чем birth_dt
, лучше поставить это значение перед индексом birth_dt
в индексе, чтобы ваш запрос меньше сканировал, если он не уникаленindex.
Вы заметили, что я не добавил выбранный столбец в этот индекс, поскольку вам уже придется идти в таблицу, поэтому вы ничего не получите, добавив ее.
evaluator
:
Присоединяется только к evaluator_id
, поэтому вам нужен уникальный, если возможно, индекс для этого столбца.