3 つの列で構成されるインデックス付きビュー ( MyView ) を作成しました。
Table1_ID (int not null)
Object_CreationDate (datetime, null)
Objec_Count(bigint null)
クラスター化された一意のインデックスTable1_ID
IX_1を 2 つの列に作成しました。Object_CreationDate
2 つのクエリを実行したい:
1.
Select * from [dbo].MyView
where Table1_ID = 10
2.
Select * from [dbo].MyView
where Table1_ID = 10
AND Object_CreationDate <= GETDATE()
最初のクエリは高速に実行され (DBCC DROPCLEANBUFFERS()を使用しても)、MyView と IX_1 を使用して単純な実行プランを使用し
ますループ)
私はこの状況を誤解しています。私としては、2番目のクエリにIX_1 とMyViewを使用するのが自然です。さらに、クラスター化インデックスにある where 句
で
2 つの列を使用するため、2 番目のクエリが 1 番目のクエリと同じか、それよりも高速に実行されることを待ちます。
2 番目のクエリwith(index=IX_1)
を実行して列の統計を更新しようとしましたが、実行計画は同じです。
SQL でMyView AND IX_1を強制的に使用することは可能ですか?