「インデックスはクエリの実行を速くする」 とは、インデックスに関する説明でも、私が見た中で最も基本的なものです。これは、インデックスの最も重要な一面をとてもうまく表していますが、残念ながら この本には不十分と言わざるを得ません。この章では、インデックスの構造について、表面的過ぎないけれど深入りもしすぎない程度に説明していきます。これで、 この本全体を通して扱われる、SQLのパフォーマンスについて理解するのに十分な基礎を知ることができるでしょう。
インデックスは、データベースの中で特有の構造を持ち、create index
文で作成されます。独自のディスク領域を必要とし、インデックスを張られた
テーブルのデータを保持します。これはつまり、インデックスは純粋に冗長な構造であるといえます。
インデックスを作成しても、テーブルのデータは変更されず、テーブルを参照する
新しいデータ構造が作られるだけです。データベースのインデックスは、その名の通り、
書籍の最後についている索引(インデックス)に非常に似ています。そのための場所を
必要とし、冗長で、別の場所に保存されている本当の情報を参照するだけであるという特徴は同じです。
データベースのインデックスを検索するのは、印刷された電話帳を検索するのに にています。全ての要素が、あらかじめ決められた順番に並んでいるというコンセプトのためです。並べ替えの順番から、それぞれの要素がどこにあるのかが すぐにわかるため、順に並んでいるデータから1つの要素を探すのは、素早くかつ簡単にできます。
協力してください
この記事が気に入ったら、私の書いた本「SQLパフォーマンス詳解」や私によるトレーニングもきっと気にいるはず。
とはいえ、印刷物と違って、データベースのインデックスは常に更新にさらされます。元々ある要素の前後に、追加する要素を書く場所がないという
単純な理由で、印刷物を更新がある度に書き換えるのは不可能です。印刷物の場合、次の印刷のタイミングまで更新分のデータをためておくことにより、この問題を
回避しているわけです。SQLデータベースの場合、そんなに長く待つことはできません。insert
やdelete
、
update
といった文をすぐに実行し、大量のデータを動かすこと
なく、インデックスの順序を保つ必要があります。
データベースは、2つのデータ構造を組み合わせてこの問題に対処しています。 それが、双方向連結リストと、検索木です。これら2つのデータ構造で、ほとんどのデータベースのパフォーマンス特性の説明がついてしまいます。