Database Index (インデックス)

インデックス(index)とは

  • テーブルに対する動作速度を高めるデータ構造を指す。
  • インデックスは、テーブル内の 1 つのカラム、または複数のカラムを使って作成できる。
  • 高速な検索動作だけでなく、レコードアクセスに関連する効率的な並び順付けの基盤も提供する。
  • インデックスとは、追加の書き込み処理と保存領域を利用して、データベーステーブルの検索速度を向上させるためのデータ構造である。
  • もし本の中で目的の内容を探すとしたら、本のすべてのページを探すには長い時間がかかる。そのため本の著者は本の先頭または末尾に索引を追加するが、データベースの index は本の索引と同じである。
  • データベースでも、テーブルのすべてのデータを検索すると時間がかかるため、データとデータの位置を含むデータ構造を作成し、高速に照会できるようにしている。
  • index を適用していないカラムを照会すると、全体を探索する Full Scan が実行される。Full Scan は全体を比較しながら探索するため速度が低下する。

データベースでデータを検索する 2 つの方法

  • FTS(Full Table Scan)
    • テーブルを最初から最後まで検索する方法である。
  • Index Scan
    • インデックスを検索し、該当データのテーブルへアクセスする方法である。

インデックスのデータ構造

  • ハッシュテーブル

    • カラム値から生成されたハッシュを基にインデックスを実装する。
    • 時間計算量が O(1) であるため検索が非常に速い。
    • 不等号(<, >)のような連続データに対する順次検索はできない。
  • B+Tree

    • 子ノードが 2 つ以上ある B-Tree を改善したデータ構造である。
    • BTree のリーフノードを LinkedList で接続し、順次検索を容易にした。
    • ハッシュテーブルより悪い O(log2n) の時間計算量を持つが、ハッシュテーブルより一般的に使用される。