У меня есть два некластеризованных индекса в таблице A:
ключевой столбец: DETECTED_UTC ASC
Включенные столбцы:APPROVAL_STATUS
, IS_ROOT
, AGENTGUID
Ключевой столбец: agentguid
Теперь запрос использует agentguid
Индекс и 1 мин 17 сек.
Но если я укажу подсказку запроса, такую как
option (table hint(A, index(DETECTED_UTC)))
Это займет 4 секунды.
Почему SQL Server не учитывает detected_utc
в плане запроса.Можно ли изменить запрос, чтобы он использовал индекс detected_utc
.Я не хочу указывать подсказку в своем запросе.
SELECT
AUTO_ID
FROM
(
SELECT
ROW_NUMBER() OVER ( ORDER BY A.DETECTED_UTC DESC ) AS ROWNUM
, A.AUTO_ID
, A.DETECTED_UTC
FROM
A
INNER JOIN B
ON A.AGENTGUID = B.AgentGUID
LEFT JOIN C
ON B.ParentID = C.AutoID
WHERE
( DETECTED_UTC > DATEADD(day, -7, GETUTCDATE()) )
AND ( APPROVAL_STATUS = '0' )
AND IS_ROOT = '1'
AND EXISTS ( SELECT
1
FROM
B epf
WHERE
epf.AgentGUID IS NOT NULL
AND epf.AgentGUID = A.AGENTGUID
AND epf.ParentID IN (
SELECT
AutoID
FROM
C
WHERE
AutoID IN ( SELECT
NodeID
FROM
D
WHERE
D.GroupID IN ( 42 ) ) ) )
) AS TEMP
WHERE
ROWNUM >= 1000
AND ROWNUM < 1041
ORDER BY
DETECTED_UTC DESC