Я создал индексированное представление ( MyView ), которое состоит из трех столбцов:
Table1_ID (int not null)
Object_CreationDate (datetime, null)
Objec_Count(bigint null)
Я создал кластеризованный уникальный индекс IX_1 по двум столбцам: Table1_ID
И Object_CreationDate
Я хочу выполнить два запроса:
1.
Select * from [dbo].MyView
where Table1_ID = 10
2
Select * from [dbo].MyView
where Table1_ID = 10
AND Object_CreationDate <= GETDATE()
1-й запрос выполняется быстро (даже с DBCC DROPCLEANBUFFERS () ) и использует простой план выполнения с использованием MyView и IX_1
Второй запрос выполняется не так быстро, потому что он использует «старый» план выполнения (поиск по нескольким индексам в трех таблицах и вложенный цикл)
Я неправильно понимаю эту ситуацию. Как по мне, естественно использовать IX_1 и MyView для 2-го запроса.
Более того, я жду, что 2-й запрос выполняется с той же скоростью или даже быстрее, чем 1-й, потому что он использует два столбца в условии where , которые находятся в кластерном индексе.
Я попытался запустить 2-й запрос with(index=IX_1)
и обновить статистику для столбцов, но все еще с тем же планом выполнения.
Можно ли принудительно использовать sql MyView И IX_1 ?