検索
ニュース

「Azure SQL Data Warehouse」が列ストアのセカンダリーBツリーインデックス作成をサポートセカンダリーインデックスの簡易使いこなしTipsも

マイクロソフトが「Azure SQL Data Warehouse」の機能を拡充。列ストアテーブルのセカンダリーBツリーインデックスをサポートした。

Share
Tweet
LINE
Hatena

 米マイクロソフトは2016年12月5日(米国時間)、「Azure SQL Data Warehouse」が列ストアテーブル(クラスタ化列ストアインデックス:CCI)のセカンダリーBツリーインデックス(非クラスタ化インデックス:NCI)をサポートしたと発表した。

 ほとんどの分析クエリは、大量のデータを集めて、列ストアセグメントを直接スキャンすることで大抵はうまく処理される。しかし、“干し草の山から針を探す”ようなクエリ、つまり1つの行や少数の行を検索するクエリが行われることもデータ分析の現場ではよくある。こうした検索クエリではフィルター列にBツリーインデックスがあると、応答時間が数十〜数百倍(さらには1000倍)改善されるという。

 Azure SQL Data Warehouseでは、これまで列ストアテーブルのセカンダリーBツリーインデックスを利用できず、ユーザーはクラスタ化Bツリーインデックスの列ストアデータを複製することで、検索クエリの応答時間を短縮する工夫をしていた。しかし、データを複製すると実装が複雑になるだけでなく、ストレージコストやレイテンシが増加する課題も残る。列ストアで新しいセカンダリーインデックスを利用できるようにすることで、データを複製することなく、複製時と同じ応答時間でクエリ結果を取得できるようになるという。

列ストアテーブルのセカンダリーBツリーインデックスの利用ガイドライン

 下図では、一般的なTransact-SQLのCREATE INDEX文と同じ構文に従ってインデックスを作成している。セカンダリーインデックスを追加して1TBのTPC-Hデータに対して簡単なテストを行ったところ、これまで41秒かかっていたクエリ時間が、1秒未満に短縮された。

photo 特定のシーンにおいては、セカンダリーインデックスを作ることでクエリ時間を大きく短縮できる

 利用ガイドラインは以下の通り。

  • 少数の行を返すクエリでフィルターとして使われる、カーディナリティ(値の種類)が高い列に使用する
  • ロード時のメンテナンスのオーバーヘッドになるので、セカンダリーインデックスは多用しない。テーブル当たり1〜2つにとどめるとよい

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る