SELECT DISTINCT
LTLT.LTLT_PFX, LTLT.ACAC_ACC_NO, LTLT.LTLT_DESC, LTLT.LTLT_CAT, LTLT.LTLT_LEVEL,
LTLT.LTLT_PERIOD_IND, LTLT.LTLT_RULE, LTLT.LTLT_IX_IND, LTLT.LTLT_IX_TYPE, LTLT.EXCD_ID,
LTLT.LTLT_AMT1, LTLT.LTLT_AMT2, LTLT.LTLT_OPTS, LTLT.LTLT_SAL_IND, LTLT.LTLT_DAYS, LTLT.WMDS_SEQ_NO,
LTLT.LTLT_LOCK_TOKEN, LTLT.ATXR_SOURCE_ID, LTLT.SYS_LAST_UPD_DTM, LTLT.SYS_USUS_ID, LTLT.SYS_DBUSER_ID,
LTLT.LTLT_EXCL_DED_IND_NVL
FROM AGP.TABLE_1 DISB_CLM
INNER JOIN TABLE_2 CLCL ON DISB_CLM.CLCL_ID = CLCL.CLCL_ID
INNER JOIN TABLE_3 PDVC ON PDVC.PDPD_ID = CLCL.PDPD_ID
INNER JOIN TABLE_4 LTLT ON LTLT.LTLT_PFX = PDVC.LTLT_PFX
Проблема: оптимизатор не использует индекс, несмотря на составной индекс для TABLE_3 и TABLE_4.
Описание:
В TABLE_4 создан следующий уникальный индекс:
CREATE UNIQUE INDEX DB.CMCX_LTLT_PRIMARY ON DB.TABLE_4
(LTLT_PFX, ACAC_ACC_NO)
В TABLE_3 создан следующий уникальный индекс:
CREATE UNIQUE INDEX DB.CMCX_PDVC_PRIMARY ON DB.TABLE_3
(PDPD_ID, PDVC_TIER, PDVC_TYPE, PDVC_EFF_DT, PDVC_SEQ_NO)
Оптимизатор использует полное сканирование таблиц для двух таблиц, даже если для обеих таблиц существуют индексы. Индексы представляют собой многостолбцовые индексы, но порядок столбцов
в соответствии с документами SQL Server, и оптимизатор должен использовать индекс. В настоящее время выполнение запроса занимает 40-50 минут.
NB. База данных базы данных принадлежит другой группе, которая не будет принимать никаких запросов на изменение индексов. Единственный вариант - настроить запрос или использовать явные подсказки для использования индекса.