データのクラスタリング: インデックスの強力さの2つ目


クラスタという言葉は、色々な分野で使われています。 例えば、英語でstar cluster(星団)は、星の集団のことを 言います。また、コンピュータ クラスタは、一定の範囲内で動作するコンピュータの集団です。その目的としては、 複雑な問題を解決するため(高性能クラスタ)であったり、可用性を高めるため (フェイルオーバクラスタ)であったりします。一般的にクラスタとは、 何らかの集団に関係することであると言えます。

コンピューティングの世界においては、もう1つ別の種類のクラスタが あります。誤解されやすい言葉ですが、それはデータクラスタです。データの クラスタ化とは、少ないIO処理でアクセスできるように、連続的にアクセスされる データを近くに保存することを言います。データクラスタは、データベース チューニングにおいて、非常に重要な役割を果たします。コンピュータ クラスタという言葉は、データベースの話をする上でも重要なものです。これが、 クラスタという単語があいまいになってしまう一因でも あります。「データベースのパフォーマンスを改善するのに、クラスタを 使いましょう」という文は、コンピュータクラスタの話をしている可能性も あるし、データクラスタのことかもしれません。この章では、クラスタとは主に データクラスタのことであるとして、話を進めていきます。

このウェブサイトにぴったりのカップは僕たちのショップにあります。
#見た目もいい感じだし、ここでの僕の仕事を支えてくれています

SQLデータベースにおける最もシンプルなデータクラスタは、行です。 データベースは、ある行の全ての列を可能な限り同じデータベースブロックに 保存します。1つのブロックにデータが収まり切らない時だけがその例外に なります。ラージオブジェクト(LOB)型が使われている場合などがそれに 当たります。

列志向データベース

列志向 データベースあるいはカラムナデータベースは、テーブルを列をベースに 並べたデータベースです。これは、多くの行に一度にアクセスするけれど、 選択する列は少ない時に有利なモデルです。このようなアクセスパターンは、 データウェアハウス(OLAP)で非常に一般的です。

インデックスはデータをクラスタ化できます。この原則は、既に第1章, 「 SQLインデックスの内部構造で説明しました。 インデックスリーフノードは、近い値が隣同士になるように、インデックスを 作った列を並べ替えて保存します。つまりインデックスは、近い値を 行のクラスタとして構成しているわけです。データをクラスタ化するこの機能は、 インデックスの強力さの2つ目として、非常に重要です。

注記

Bツリーの走査が インデックスの強力さの1つ目でした。

クラスタ化が、その2つ目になります。

以降の節では、データのクラスタ化のためにどのようにインデックスを使い、 またどのようにクエリのパフォーマンスを向上させるかについて、 説明していきます。

この説明が気に入れば、きっと この本も 気に入るはず。

Photo of Markus Winand
Markus Winand氏は、開発者がSQLパフォーマンスを改善するお手伝いをしています。 彼は、SQL Performance Explainedの 著者でもあり、出張トレーニングhttp://winand.at/での リモート講義も 行っています。