Как я могу заставить представление использовать определенный индекс? - PullRequest
0 голосов
/ 25 октября 2018

Как я могу заставить представление использовать определенный индекс?

При попытке принудительного использования индекса появляется следующее предупреждение:

Предупреждение: подсказки индекса включеныдля представления «BANK.CUSTOMER_ORDER_VIEW» будет игнорироваться.

Ниже мой запрос:

DECLARE  @VALUE_DATE_START DATE = '20181001',
         @VALUE_DATE_END DATE  = '20181025'

SELECT * 
FROM BANK.CUSTOMER_ORDER_VIEW WITH(INDEX(IX_ValueDate))
WHERE VALUE_DATE BETWEEN @VALUE_DATE_START AND @VALUE_DATE_END

IX_ValueDate - это индекс таблицы, которая используется в BANK.CUSTOMER_ORDER_VIEW.

1 Ответ

0 голосов
/ 25 октября 2018

Что вам нужно, чтобы позаботиться о написании подсказок: подсказки запроса / таблицы предназначены только для рекомендаций, оптимизатор может игнорировать их, как в вашем случае.Этот момент недостаточно хорошо документирован , но где-то упоминается , например

Когда в таблице фактов в соединении «звезда» используется подсказка индекса, ссылающаяся на несколько индексов, оптимизатор игнорируетИндекс подсказка и возвращает предупреждающее сообщение.

С другой стороны, ваш запрос является типичным примером, когда требуется OPTION(RECOMPILE) из-за объявленных переменных: однажды сгенерированный и кэшированный план для узкого периода не подходитна большой период и т. д.

...