どんな時に列ストアインデックスを使うのか
列ストアインデックスの基本的な情報について以前、「カラムストアインデックスのすべて」の記事で紹介しました。列ストアインデックスの特徴として、処理の向き不向きを解説するなかで「DWH系大規模テーブルでの使用が最も威力を発揮する」ことを伝えています。列ストア型のオブジェクトのターゲットは、まさにそこにあるわけでして、至極当然なことです。
それなのに(ああ、それなのに)、たまに列ストアインデックスの話が出ると「OLTP的に更新ができない」ことが、くつがえすことができない欠点のように語られて、つらい思いをすることがあります。
列ストア型オブジェクトは、従来の行ストア型オブジェクトの利点とは別の観点からDWH系大量処理の速度を向上させています。そのため、行単位でデータを取り出して操作する処理に制約があるのは、ある程度(現時点では)やむを得ないかもしれません。もちろん世の中にはデータを更新できる列ストア型データベース製品もあります。でも、そのような製品であっても、OLTPのようなデータ更新を決して得意としているわけではありません。そのような些末な点よりも、ぜひSQL Server 2012が実装した方式の優れた点に目を向けてみてください。
多くのベンダーは、列ストア型データベース製品と行ストア型データベース製品を別々に出荷しています。いうまでもなく双方を使おうとするとライセンスコスト、開発コストから運用コストまで、別々に必要です。一方でSQL Server 2012では、どちらの形式であっても同じインスタンスで処理できます。つまり、様々な面(コストやアプリケーションの開発利便性など)でメリットがあります。
同じSQL Serverインスタンスの中で、オブジェクトを使い分けることによってOLTPにもDWHにも対応することができるというわけです。そのような利点を享受するためにも、本稿で列ストアインデックスをもっと快適に使うためのいろいろなポイントを紹介します。