次のようなSQL 2016テーブルがあります。
テーブルに列ストアクラスター化インデックスがあり、他のインデックスはありません。次のクエリを実行しています。
Select *
From dbo.PanelWorkflow
Where ReadTime Between '4/1/2016' And '4/5/2016' And Lineage = 'PBG11A' And ProcessNumber = 5400
クエリプランは次のようになります。
このテーブルには1.1B行があります。クエリプランにはスキャンが表示され、クエリの実行には約1分かかります。 〜21,000行が返されます。これは、列ストアクラスター化インデックスに期待できることですか?スキャンは常に行われますか(テーブルに他のインデックスがない場合)。これは私が期待できる種類のパフォーマンスですか(許容範囲ですが、それほど良くありません)?
統計情報IOをオンに設定し、次の出力を取得しました。
Table 'PanelWorkflow'. Scan count 2, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 9733431, lob physical reads 195, lob read-ahead reads 13045645.
Table 'PanelWorkflow'. Segment reads 955, segment skipped 336.
最後に、上記のクエリは、CSIがどのように実行および動作するかを理解するための厳密なテストクエリです。これは本番レベルのクエリではありません。
テーブルに列ストアクラスター化インデックスがあり、他のインデックスはありません...クエリプランはスキャンを示しています
まあ、それはCCIで利用できる唯一のオプションです。 CCIを使用すると、パフォーマンスの向上は列の削除、圧縮、およびセグメントの削除からもたらされ、すべてがIOの削減に貢献し、スキャンが高速に実行できるようになります。あなたの場合、私は2つのことを見ていきます:
sys.column_store_row_groups
。 1.1Bの行の場合、すべて閉じて圧縮された最大1000個の行グループが必要です。今、あなたのクエリ:
Select *
From dbo.PanelWorkflow
Where ReadTime Between '4/1/2016' And '4/5/2016' And Lineage = 'PBG11A' And ProcessNumber = 5400
これは、aboutの列ストアと大きなテーブルではありません。日付範囲とその他の基準を満たすすべての列を選択しています。何のためにfor?分析データは、集計の計算とanalysisの作成に関するすべてです。 *
。サーバー側で関連分析を計算します。生データのページにページを表示する必要がない方法でアプリを再設計します。