今さら聞けない列ストアインデックスの仕組みと進化・活用シーン(前編)
前回の記事では SQL Server のメモリ最適化OLTP エンジンについてご紹介しました。今回は SQL Server における分析ワークロードを高速化する列ストアインデックスについてご紹介します。列ストアインデックスでは、SQL Server のメモリ最適化テクノロジの一つであるxVelocity メモリ最適化列ストアインデックスの技術が利用されています。本記事の前編では、xVelocityメモリ最適化列ストアインデックスでのデータ圧縮およびBatch Mode処理の動作をご紹介し、後編ではSQL Server における列ストアインデックスの実装がどのように進化してきているかをご紹介します。
xVelocityとSQL Server における列ストア インデックスの実装
SQL Server データベース エンジンの列指向オブジェクトである列ストア インデックス (※1) は SQL Server 2012 で初めて導入されました。
列ストア インデックスはマイクロソフトのメモリ最適化データ管理テクノロジである xVelocity (※2) を使用したメモリ最適化列ストア インデックスで、最新の圧縮アルゴリズムだけでなく、xVelocity により導入された「Batch Mode処理」と呼ばれるベクトルに基づく新しいクエリ実行テクノロジが、列ストア インデックスと組み合わされることで、クエリ処理が劇的に高速化されます。xVelocity は PowerPivot for Excel 2010、PowerPivot for SharePoint 2010 と共に SQL Server 2008 R2 で初めて導入されたテクノロジー(当時の呼称は VertiPaq)で、現在では SQL Server Analysis Services 表形式モードでも採用されています。
※2 SQL Server 2012 での xVelocity
xVelocity メモリ最適化列ストアインデックスにおけるデータ圧縮
行ストアデータが列ストア圧縮されるまでの大まかな流れを下図に示します。

フェーズⅠ:データの読込・分割
ヒープ、クラスター化インデックス等の行ストアのデータは行グループ単位(1行グループ当たりの最大行数は 1,048,576 行)に分割され、さらに列セグメントに分割されます。
フェーズⅡ:Encoding(符号化)
各列セグメントのデータを符号化して整数ベクトルへ変換します。整数ベクトル化することで復号化せずに直接集計処理できるようにします。列のデータ型やカーディナリティから符号化の方法を以下の2つから選択します。
辞書ベースの符号化(Dictionary Encoding)
- 値を整数値で表現するために定性的な属性をDictionary に抽出します。
- 文字列型やカーディナリティの低い数値型に適しています

値ベースの符号化(Value Encoding)
- Numericの場合、最も小さい正の指数を選択(指数ベースの符号化)し、基数ベースの符号化を行います
- Integerの場合、最も小さい負の指数を選択(指数ベースの符号化)し、基数ベースの符号化を行います

フェーズⅢ:Compression(圧縮)
さらに列セグメントを以下の2つから圧縮アルゴリズムを選択して圧縮を実行します。整数ベクトルのまま圧縮することで復号化せずに直接集計処理をすることができます。
Bit Packing 圧縮
- ビット演算処理を施して、より少ないビット数でデータを表現する圧縮方式です。

Run Length Encoding 圧縮
(値, 繰り返し回数) のペアで値を格納する圧縮方式です。連続する値が多い場合、非常に高い圧縮率を実現できます。

この記事は参考になりましたか?
- 今さら聞けないSQL Serverのメモリ最適化テクノロジーと、押さえておきたいSQL Serverのデータベースセキュリティ連載記事一覧
-
- クラウドでの利用も安心! SQL Server におけるデータ暗号化
- 今さら聞けない列ストアインデックスの仕組みと進化・活用シーン(後編)
- 今さら聞けない列ストアインデックスの仕組みと進化・活用シーン(前編)
- この記事の著者
-
川野 純(カワノ ジュン)
日本マイクロソフト株式会社
クラウド&ソリューションビジネス統括本部
データプラットフォーム技術部 日本マイクロソフトで SQL Server を中心としたデータプラットフォーム製品群の技術営業を担当しているチームに所属しています。外資系データベースベンダーにてサポートエンジニア、プリセールスエンジニアを経て日本マイクロソフトに入社。お客様の課題解決に繋がるであろう小難しいテクノロジーを、わかりやすく紐解いてお客様にお伝えすることに日々心血を...※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア