1

明らかに、インデックス統計について理解できないことがあります。

ロギング用に数百万行のテーブルがあります。パフォーマンスを向上させるために、ビューとその上に一意のクラスター化インデックスを作成し (最初のインデックスは一意にクラスター化する必要があるため)、非クラスター化インデックスを作成して、インデックスにさらに列を含めることができるようにしました。

次に、これらのインデックスとビューを使用した場合と使用しない場合のクエリのパフォーマンスを比較します。確かに速度が向上し、読み取りと CPU 使用率も低下しているように見えます。

しかし、SQL サーバーが適用した実行計画を見ると、その非クラスター化インデックスのインデックス シークで、一部の列に統計がないという警告が見つかりました。これらの列は where 句にも表示されるため、ここでパフォーマンスを改善する必要があると思います。実行計画が統計がないことについて不平を言っている列が 2 つあります。そのうちの 1 つは非クラスター化インデックス内にあり、もう 1 つはそのインデックスの include 句内にあります。とにかく、これらの統計がまだ欠落している理由がわかりません。

たとえば、http://msdn.microsoft.com/en-us/library/ms190397.aspxでは、「クエリ オプティマイザーは、インデックスの作成時にテーブルまたはビューのインデックスの統計を作成します。」と述べています。さて、私はそれらのインデックスを作成しただけで、それ以来、行は更新または挿入されていません。また、AUTO_UPDATE_STATISTICS と AUTO_CREATE_STATISTICS が有効になっていることも確認しましたが、何が欠けているのでしょうか?

また、SQL Server Management Studio を介してそのインデックスの統計を調べました。は include 節内にありません)。

どうすればこの警告を取り除くことができますか、つまり、これらの統計を作成/強制して存在させることができますか?

4

1 に答える 1

0

次のコードで統計を作成してみてください。

CREATE STATISTICS StatName
ON dbo.IndexedView(ColumnName,...)
WITH SAMPLE 25 PERCENT 
于 2013-10-15T15:37:32.167 に答える