В SQL Server нет способа исключить индекс для рассмотрения оптимизатором запросов. Однако вы можете использовать ключевое слово WITH
, чтобы указать, какой индекс вы хотите. Например, чтобы заставить запрос использовать индекс ix1_groupId_id2_id3_ival_iid
:
SELECT id2, COUNT(*)
FROM table (WITH(INDEX(ix1_groupId_id2_id3_ival_iid))
WHERE groupId=x
GROUP BY id2
Перед использованием подсказки индекса я бы порекомендовал попытаться понять , почему база данных не хочет использовать индекс. Возможно, таблица очень мала, поэтому сканирование таблицы выполняется быстрее, чем поиск по индексу. Или, возможно, статистика по этим индексам устарела, поэтому использование первичного ключа представляется оптимизатору быстрее.
Индексные подсказки вводят неожиданные зависимости кода на схеме. Если кто-то захочет изменить имя индекса в будущем, он может не осознавать, что этот запрос запрашивает индекс по имени, поэтому теперь запрос не будет работать, пока не будет использовано новое имя.