by Hayato Matsuura.

データのクラスタリング


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

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

協力してください

この記事が気に入ったら、私の書いた本「SQLパフォーマンス詳解」や私によるトレーニングもきっと気にいるはず。

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