by Hayato Matsuura.

データのクラスタリング


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

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

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

列志向データベース

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

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

注記

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

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

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

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

目次

  1. フィルタ述語の意図的な使用 - LIKE句のチューニングのために

  2. インデックスのみのスキャン - テーブルアクセスをなくす

  3. 索引構成 表 - テーブルを持たないクラスタ化されたインデックス

前へ次へ

著者について

Markus Winandの写真

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

彼の本

カバー『SQLパフォーマンス詳解』

核心をわかりやすく 解説。

Markusから購入します
(送料無料+PDF)

Amazonで購入
(印刷版のみ)

“Use The Index, Luke!” by Markus Winand is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.
法律上の通知 | 接触 | 無保証 | 商標 | Privacy | CC-BY-NC-ND 3.0 license