Почему SQL игнорирует указатель индекса и выбирает другой индекс?
Имеется таблица с двумя индексами, один из которых отсортирован в обратном порядке от другого и задан эти два запроса.
Select value From SomeTable wITH (INDEX(IV_Sort_Asc))
Select value From SomeTable wITH (INDEX(IV_Sort_Desc))
Я встречал случай в SQL Server 2008, где подсказки игнорируются, и в обоих случаях IV_Sort_Desc
Индекс используется вместо первого.
Я понимаю, что многие люди немедленно предложат не давать подсказку, однако, учитывая мой конкретный случай, это не вариант.
Что может вызвать это и что я могу сделать, чтобы это исправить? Конечно, вы ожидаете, что SQL Server будет соблюдать подсказку индекса, а не использовать другую?
1 ответ
Я столкнулся с той же проблемой, когда хотел, чтобы SQL использовал индекс для представления. Я выяснил, что мне пришлось использовать опцию NOEXPAND:
WITH (FORCESEEK, INDEX (IndexName),NOEXPAND)
https://technet.microsoft.com/en-us/library/bb510478%28v=sql.105%29.aspx