web-dev-qa-db-ja.com

私のテーブルはクラスター化列ストアインデックスの対象になりますか?

MSSQL 2014に30列の大きなテーブルがあります。データは1日に数回一括で挿入され、1か月間保持する必要があります。

その目的は、集約されたクエリを選択することです。したがって、クラスター化された列ストアインデックスはこれに最適のようです。 1つの列がvarcharであり、通常は繰り返されないURL値を保持することを除いて。 Columnstoreでうまく機能しますか?私はそれを使用しましたが、数値または繰り返し文字列(ドメインなど)を保持するデータのみを対象としました。

[〜#〜] update [〜#〜] 1.インポートおよびパージの目的で、テーブルはパーティション化されます。 2.現在、設計段階にあるため、正確なDDLはありません。ありがとう

3
Liya Tansky

テーブルのクラスター化された列ストアインデックスが適切に機能する場合がありますが、列ストアインデックスにそのVARCHAR列が含まれることは避けたいと思います。これが引き起こす可能性のある問題の1つは、 辞書の圧力 です。

テーブルをパーティション化し、パーティションの切り替えを介してデータを変更しようとしているので、URLを含むVARCHAR列を含まない非クラスター化列ストアインデックスをテーブルに構築することをお勧めします。これにより、テーブルは読み取り専用になりますが、パーティションの切り替えを介してデータをロードしたり、データをロードしたりすることはできます。

私が過去にこれを行った方法は、データをステージングテーブルに一括ロードし、そこでポストロード処理を実行してから、テーブル全体をメインテーブルの空のパーティションに切り替えることです。それは面倒ですが非常に効果的です。

もう1つのオプションは、更新可能な非クラスター化列ストアインデックスを許可するSQL Server2016を使用することです。

1
James Anderson