LogテーブルとLogItemテーブルがあります。私は両方からいくつかのデータを取得するクエリを書いています。数千がLogs
あり、それぞれLog
が最大125まで持つことができますLogItems
問題のクエリは複雑なのでスキップしています(誰かが重要だと思うなら、おそらく投稿できるでしょう)が、SSMS推定クエリプランを実行すると、新しい非クラスタ化インデックスによってパフォーマンスが最大100%向上することがわかりました。
Existing Index: Non-clustered
Key Colums (LogItem): ParentLogID, DateModified, Name, DatabaseModified
Query Plan Recommendation
CREATE NONCLUSTERED INDEX [LogReportIndex]
ON [dbo].[LogItem] ([ParentLogID],[DatabaseModified])
楽しみのために、この新しいインデックスを作成してクエリを実行しましたが、驚いたことに、クエリが実行されるまでに10秒以上かかるのに1秒かかりました。
既存のインデックスがこの新しいクエリをカバーすると想定したので、私のクエリは、新しいクエリで使用される列のみに新しいインデックスを作成するとパフォーマンスが向上するのはなぜですか?where
句で使用される列の一意の組み合わせごとにインデックスを作成する必要がありますか?
注:これは、SQL Serverが結果をキャッシュしているためだとは思いません。インデックスを作成する前に約25〜30回クエリを実行しました。以下。