「Azure SQL Data Warehouse」が列ストアのセカンダリーBツリーインデックス作成をサポート:セカンダリーインデックスの簡易使いこなしTipsも
マイクロソフトが「Azure SQL Data Warehouse」の機能を拡充。列ストアテーブルのセカンダリーBツリーインデックスをサポートした。
米マイクロソフトは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秒未満に短縮された。
利用ガイドラインは以下の通り。
- 少数の行を返すクエリでフィルターとして使われる、カーディナリティ(値の種類)が高い列に使用する
- ロード時のメンテナンスのオーバーヘッドになるので、セカンダリーインデックスは多用しない。テーブル当たり1〜2つにとどめるとよい
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- マイクロソフト、「Azure SQL Data Warehouse」を一般向けに提供開始
マイクロソフトは、「Azure SQL Data Warehouse」を一般向けに提供開始した。MPPアーキテクチャを基盤とし、大規模なデータ処理が可能である他、「SQL Server」のツールと互換性があるという。 - マイクロソフト、「Azure SQL Data Warehouse」に「Premium Storage」を導入
マイクロソフトは「Azure SQL Data Warehouse」に「Premium Storage」を導入し、パフォーマンス予測とクエリの一貫性を向上させた。 - Bツリーインデックスに最高のパフォーマンスを
Oracleデータベースの運用管理者は、突発的に直面するパフォーマンス障害にどうやって対処したらよいか。本連載は、非常に複雑なOracleのアーキテクチャに頭を悩ます管理者に向け、短時間で問題を切り分け、対処法を見つけるノウハウを紹介する。対象とするバージョンはOracle8から9iまでを基本とし、10gの情報は随時加えていく。(編集局) - キャッシュを無駄遣いしないようにクエリを書く
実行プランを調べて、効率の良いクエリを書くことを意識している人は多いと思います。しかし、SQL Serverの性能を引き出すにはそれだけでは不十分です。今回は、SQL Serverの性能を引き出すクエリの書き方を解説します(編集部)