Columnstore Indexes Versioned Feature Summary に記載されていますが、SQL Server 2016 CTP 2.0 の列ストアインデックスの変更点をメモとして。
In-Memory OLTP とのくみあわせもあるので、この辺はじっくり適用ケースを考える必要が出てきそうですね。
# Hot / Warm / Cold データの用途別の階層化されたデータに対しての設計が今後重要になるかと。
- Batch execution for single-threaded queries
2014 まではバッチモードでクエリを実行するためにはマルチスレッドで実行する必要があったため、複数コアが必要でしたが、2016 からは 1 コアでバッチモードが実行可能となっています。
SQL Database v12 でも、この変更は適用されており、P1 でもバッチモードによる実行が可能になっているかと。 - Snapshot isolation and read-committed snapshot isolation
スナップショット分離レベル、リードコミットスナップショット分離レベルのサポート
SQL Database v12 はこの辺がデフォルトで有効だったはずですので、その変更が 2016 でも実装されてきている感じですかね。 - Specify columnstore index when creating a table.
テーブルの作成時に列ストアインデックスが設定可能になっています。
今までは、テーブルの作成→列ストアインデックスの作成という順序となっていましたが、
INDEX index_name CLUSTERED COLUMNSTORE
INDEX index_name [ NONCLUSTERED ]
というような、CREATE TABLE 実行時にインライン指定ができるようになっています。 - AlwaysOn readable secondary supports updateable columnstore indexes.
これはそのままですね。
AlwaysOn 可用性グループの読み取りセカンダリーで列ストアインデックスがサポートされています。 - Updateable nonclustered columnstore index on heap or btree
2014 までの非クラスター化列ストアインデックスは更新ができなかったため、設定した場合、パーティションのスイッチ等でデータの増減のメンテナンスをする必要がありました。
2016 ではこの制限が緩和され更新ができるようになります。
これにより B-Tree 型のデータ + 列ストアインデックスによる、更新可能なテーブルの作成が可能となります。
列ストアインデックスは、その構造上、行のデータを取得する場合には行グループのセグメントで読んでいたかと思いますので、この辺のオーバーヘッドを減らすことができるようになるかと。 - Btree index on a clustered columnstore index.
- Columnstore index on a memory-optimized table.
- Nonclustered columnstore index definition supports using a filtered condition.
上の 3 種類は Columnstore Indexes for Operational Analytics のシナリオですかね。 - New batch mode execution support for queries using any of these operations:
互換性レベル 130 で使用可能
どのようなデータ構成で有効的にかつようできるかを考えないといけないですね。