データベースのインデックスとは、データ検索操作の速度を向上させるデータ構造のことです。本の巻末にある索引が、すべてのページを閲覧しなくても特定の内容を素早く探し出すのに役立つように、データベースの索引はデータベースエンジンがテーブル全体をスキャンしなくてもデータを探し出せるようにします。
例えば、図書館にあるすべての本に関する情報を保存しているデータベースを考えてみましょう。
インデックスがなければ、特定の著者の本を見つけるためにデータベースはすべての本のレコードを1つずつ調べて、その著者の本を見つけるまで調べる必要があります。これをフルテーブルスキャンやフルスキャンと呼びます。
しかし、author
カラムにインデックスがあれば、データベースは指定された著者が書いた本を直接見つけることができます。これはテーブルの行数が多い場合、フルテーブルスキャンよりもはるかに高速です。
Author_A
の本を検索するとき、データベースはこのインデックスを使用してAuthor_A
がBook1
、Book3
、Book5
を書いたことを即座に見つけることができます。
SQLでカラムにインデックスを作成するにはCREATE INDEX
ステートメントを使用できます。
ここで重要なのは、インデックスはデータの検索を高速化する一方で、挿入、更新、削除といったデータの変更操作を遅くしてしまうということです。
データが変更されるとインデックスも更新する必要があるためです。したがって、インデックスを使用する際には読み取り効率と書き込み効率の間でバランスを取る必要があります。