SQL Data Warehouse を使ってみる その 3 の続きです。
前回は分散方式について確認をしましたが、今回はインデックスを見ていきたいと思います。
SQLDW は PDW がベースになっていますのでインデックスとしては、
- クラスター化インデックス
- 非クラスター化インデックス
- クラスター化列ストアインデックス
を使用することができます。
SQLDW では、行ストアテーブルについてはデフォルトでページ圧縮が行われるようになっています。
All rowstore tables are created with page compression. This is not user-configurable in SQL Data Warehouse.
テーブルの基本については、 CREATE TABLE (Azure SQL Data Warehouse) を見るとよいかと。
SQL Server では、2014 から更新可能なクラスター化列ストアインデックスが追加されましたが、このクラスター化列ストアインデックスは PDW で先行して実装されていたものですので、SQLDW でも使用することができます。
SQLDW では CREATE TABLE 時に WITH 句を使用することで、テーブルの作成とインデックスの設定を合わせて実行することができます。
CREATE TABLE FactHash ( KeyCol int, subkey int ) WITH ( CLUSTERED COLUMNSTORE INDEX, DISTRIBUTION = HASH(KeyCol) ) GO CREATE TABLE FactHash2 ( KeyCol int, subkey int ) WITH ( CLUSTERED INDEX (KeyCol), DISTRIBUTION = HASH(KeyCol) ) GO
CREATE TABLE 時にインデックスを作成した場合、インデックスの名称が自動で設定されるため、インデックス名を明示的に指定したい場合は、テーブルを作成した後に、以下のようなクエリでインデックス名を指定したインデックス作成を実施することができます。
CREATE INDEX idxHash ON FactHash(KeyCol) CREATE CLUSTERED INDEX cidxHash ON FactHash(KeyCol) CREATE CLUSTERED COLUMNSTORE INDEX ccidxHash ON FactHash
現状の SQLDW では、SQL Server 2016 の実装は入っていないようですので、クラスター化列ストアインデックスと、行ストアのインデックスを組み合わせることはできないため、列ストア / 行ストアのどちらかを使用してデータを格納することになるようです。