SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

最新イベントはこちら!

Enterprise IT Women's Forum

2025年1月31日(金)17:00~20:30 ホテル雅叙園東京にて開催

Security Online Day 2025 春の陣(開催予定)

2025年3月18日(火)オンライン開催

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けの講座「EnterpriseZine Academy」や、すべてのITパーソンに向けた「新エバンジェリスト養成講座」などの講座を企画しています。EnterpriseZine編集部ならではの切り口・企画・講師セレクトで、明日を担うIT人材の育成をミッションに展開しております。

お申し込み受付中!

EnterpriseZine(エンタープライズジン)

EnterpriseZine編集部が最旬ITトピックの深層に迫る。ここでしか読めない、エンタープライズITの最新トピックをお届けします。

『EnterpriseZine Press』

2024年秋号(EnterpriseZine Press 2024 Autumn)特集「生成AI時代に考える“真のDX人材育成”──『スキル策定』『実践』2つの観点で紐解く」

あたらしいSQL Server/Denaliの世界

カラムストアインデックスのすべて(前編)


Code Name Denali の正式名称がSQL Server 2012 と発表されて久しいですが、これまでと同様に製品の開発は順調に進行しています。先月にはリリース候補版RC0の公開が行われましたので、すでに新しいリリースをお試しくださった方も多いのではないでしょうか。さて、今回から2 回にわたり、SQL Server 2012 で導入される機能の中でも、意欲的な取り組みのひとつとなるカラムストアインデックスについてとりあげます。担当するのは日本マイクロソフトプレミアフィールドエンジニアリング部の平山です。

それは大量データ操作を高速化する新しいインデックス

 SQL Server 2008 のリリース以降、データウェアハウス系のワークロードに対応するために数々の機能を実装してきました。スタースキーマに最適化するためのビットマップフィルタリング(注1)、各種の圧縮操作(注2)などが代表的なものとなります。

(注1)
データウェアハウス系ワークロードを効率的に処理するために、主としてスタースキーマに対するクエリのパフォーマンスを向上させるための機能です。ファクトテーブルとディメンジョンテーブルの結合時に、メモリ上でデータの一部の圧縮や不要データの除去などを行い処理全体の効率化を図ります。

(注2)
SQL Server の圧縮機能は SQL Server 2005 SP2 から導入が始まりました。まずは decimal データ型にのみ対応する限定的な実装でした。さらに SQL Server 2008 では「行圧縮」と「ページ圧縮」という形で圧縮対象の拡張や、圧縮方法の選択肢が増えました。また、SQL Server 2008 R2 からは Unicode データに特化した圧縮機能が組み込まれて、より効率の高い圧縮操作が行えるようになっています。

 そして、またひとつ大きく大量データの操作を高速化する機能が SQL Server 2012 で追加されます。それがカラムストアインデックスと呼ばれる新しい形式のインデックスです。

 これまでの SQL Server は、ページと呼ばれる 8 KB のブロックの中に、表形式で定義したテーブルの各行をひとつの単位として格納していました。

 この方法のメリットは、オフセットでシンプルに管理されている点です。アクセスが必要になるとオフセットを使用してページ内の位置を特定することができます。位置が確定されてしまえば、そこから行を取り出せば要求を満たすことができます。

 一方でデメリットとなり得る動作としては、I/O 量が予想よりも増加する場合があげられます。それは、データ操作の最小単位を「行」としてとりあつかうため、たとえば、とても列数が多いテーブルの、ほんの少しの列だけを必要とするような場合には、どのような事が起こるでしょうか。例えば 100 列で構成されているテーブルの 1 列のみを必要とするクエリを実行する場合、内部的には、1 行ごとに本来であれば不要なはずの 99 列も操作対象になっています。さらに、これはデータ量が増加すればするほど肥大化していくオーバーヘッドになります。

 そこでカラムストアインデックスが投入されることになります。その名が示すように列ごとにデータをひとつのまとまりとしてとらえて、管理しているのが特徴です。(従来のインデックスはロー(行)ストアインデックスと呼べるかもしれませんね)

 列ごとのまとまりでデータを管理する最大のメリットは、クエリで必要としているデータのみを操作できる点です。

 不要な列に対する IO 操作を削減することは、SQL Server が多くの場合にボトルネックとなる要因を取り除くことにつながります。また、行ごとにデータを管理している場合は、列に重複した内容が含まれていると、それぞれを個別の値として保持する必要がありました。列単位で管理することにすれば、重複データを取り除くことができます。また、同じ属性をもつ列は、完全に一致しないまでも類似するデータを保持していることがあります。SQL Server の圧縮アルゴリズムの動作の特性として、値が類似するデータはその圧縮率が高まります。検証の結果としてページ圧縮の 1.4 倍の圧縮率が確認されています。そのため結果的に、こちらの面からも IO 数を削減することにつながります。

 その結果として、データウェアハウス系の大量データを参照する場合、これまでのインデックスと比較すると、カラムストアインデックスはパフォーマンスの面で大きなアドバンテージがあるといえます。

 さて、ここからはカラムストアインデックスのより具体的な内容の紹介に移ります。

次のページ
カラムストアインデックスの作成

この記事は参考になりましたか?

  • Facebook
  • X
  • Pocket
  • note
あたらしいSQL Server/Denaliの世界連載記事一覧

もっと読む

この記事の著者

平山理(ヒラヤマオサム)

日本マイクロソフト株式会社
プレミアフィールドエンジニアリング
プレミアフィールドエンジニア日本マイクロソフトの Premier Field Engineering 部で、お客様に SQL Server をスムーズにお使いいただくための様々なお手伝いをしています。Sybase (現 SAP) 勤務時代の 5 年間とマイクロソフトでの 12 年間、データベース道を極めるために精進する毎日です。
二人の娘の父親で...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

EnterpriseZine(エンタープライズジン)
https://enterprisezine.jp/article/detail/3675 2012/02/10 18:25

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング