Я пытаюсь улучшить запрос. У меня есть набор данных, открытый для билетов. Каждый билет имеет разные строки, каждая строка содержит обновление билета. Существует поле (dt_update), которое отличает его от каждой строки.Настройка Oracle для запроса с запросом annidate
У меня есть эти индексы в st_remedy_full_light.
IDX_ASSIGNMENT (ПЕРЕДАЧА)
IDX_REMEDY_INC_ID (REMEDY_INC_ID)
IDX_REMDULL_LIGHT_DTUPD (DT_UPDATE)
Теперь, запрос выполняется в 8 секунд. Является высокой для меня.
WITH last_ticket AS
(SELECT *
FROM st_remedy_full_light a
WHERE a.dt_update IN
(SELECT MAX(dt_update)
FROM st_remedy_full_light
WHERE remedy_inc_id = a.remedy_inc_id
)
)
SELECT remedy_inc_id, ASSIGNMENT FROM last_ticket
Это план Как я мог улучшить этот запрос?
P.S. Это только часть большого запроса
Дополнительная информация: - таблица st_remedy_full_light содержит 529.507 строк
Может быть несколько 'st_remedy_full_light' с тем же 'dt_update' per 'remedy_inc_id'? –
указатель на (remedy_inc_id, dt_update) - или, возможно, даже (remedy_inc_id, dt_update, присваивание) - должен помочь вам, если вы не хотите/не можете изменить подзапрос на то, что предлагает Тони Эндрюс. То есть один индекс, содержащий несколько столбцов, а не индекс для каждого столбца - Oracle сможет использовать только один из этих индексов столбцов для запроса, он не может использовать все три, даже если вы используете все три столбца в своем запрос. Такой индекс, вероятно, также поможет предложенному Тони Эндрю запросу. – Boneist
@EvgeniyK. не только remedy_inc_id имеют больше dt_update, но не другие. – vecio88