Почему 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

Другие вопросы по тегам