データベース

データベースのインデックスの仕組みを学ぼう!

アイキャッチ

今回は、データベースの高速化に欠かせない「インデックス」の仕組みについて、分かり易く解説します。

「インデックスってなに?」
「付けたら速くなるって聞いたけど、どういう仕組みなの?」
「そもそも必要なの?」

と感じた方でも、この記事を読めば「インデックスって、そういうことか!」と理解できるようになると思います!

そもそもインデックスって何?

インデックスとは、データベース内の検索を高速化するための仕組みです。

本で例えるなら、「目次」や「索引」です。

本の目次とインデックスの関係

たとえば、「データベースの基本」という本があって、その本の中の「SQLの書き方」について書かれているページを探したいとします。もし目次がなければ、最初のページからすべてのページをめくって内容を確認する必要がありますよね。

それでは時間がかかりすぎます。

しかし、目次や索引があれば「SQL → p.52」とすぐに分かり、目的のページを一発で開けます。

これと同じことをデータベースでもやってくれるのが、インデックスなんです。

インデックスがないとどうなる?

実際、データベースのテーブルにインデックスが無い状態で検索を行うと、「フルテーブルスキャン」というものが実行されます。

これは、テーブル内の全レコードを1件ずつ見ていく処理のことで、データ量が少なければ問題ありませんが、数百万件以上になると、検索時間が一気に増えます。

といってもイメージが掴みにくいと思いますので、具体的な例を使って次に解説します。

インデックスの基本的な仕組み【図解】

以下は、社員情報テーブルに「社員ID(employee_id)」をインデックスとして設定したときのイメージです。

このように、インデックスが「検索キーと実データの対応表」のような役割を果たします。
検索はインデックスを使って素早く対象を特定し、そのあと実データにアクセスします。

実際の使い方(SQL)

参考までに、MySQLで、社員IDにインデックスを追加するには以下のように書きます。

sqlコピーする編集するCREATE INDEX idx_employee_id ON employees(employee_id);

インデックスの種類

インデックスにはいくつか種類があり、用途に応じて使い分けることが大切です。

種類特徴適した用途
B-tree一般的。順序性が保たれる。範囲検索も可能よく使うカラム、日付、IDなど
ハッシュ完全一致検索に高速。範囲検索には不向きプライマリキー、IDなどの一意検索
ビットマップ値の種類が少ないカラムに最適。複数条件のOR検索に強い性別、都道府県など
複合インデックス複数のカラムを組み合わせてインデックス化AND検索やJOIN条件に使う場合

インデックスのメリットとデメリット

ここまで解説したインデックスにはメリットが多そうですが、デメリットもいくつかありまうので、覚えておきましょう!

✅ メリット

  • 検索速度が大幅に向上
  • JOINやWHERE句のパフォーマンス改善
  • ソート処理も高速化されることがある

⚠ デメリット

  • インデックスの作成・更新にコストがかかる(INSERT/UPDATE/DELETEが遅くなる)
  • 多すぎると逆にパフォーマンスを悪化させる
  • ディスク容量を消費する(特に複合インデックスやビットマップ)

インデックスが効かないケースもある?

実は、インデックスがあっても使われないことがあるので要注意です。

例えば以下のようなパターンがあります。

インデックスが効かないケース

  • WHERE句でインデックス対象のカラムに関数を使う(例:WHERE UPPER(name) = 'TARO'
  • LIKE句で前方一致でない検索(例:LIKE '%taro'
  • インデックス対象でないカラムでの検索

実務でのインデックス設計ポイント

最後にインデックスを設計するポイントを解説します。

データベース設計者向けではありますが、このポイントを覚えておくと、インデックスの理解が深まりますね。

設計のポイント

  • よく検索・ソートに使われるカラムを優先
  • 更新の多いテーブルでは必要最小限に
  • EXPLAINなどでSQLの実行計画を確認する
  • 頻繁にJOINに使うカラムにも検討

まとめ

今回はデータベースにおけるインデックスに関して解説してきました。

インデックスのまとめ

  • インデックスは「検索を速くする地図
  • 正しく使えばパフォーマンスは大幅に向上
  • しかし万能ではなく、設計と運用が重要
  • インデックスの作り方には何種類かある
  • インデックスが効かないケースもある

インデックスの理解は、パフォーマンスチューニングの第一歩!
ぜひ実際に手を動かして試してみてくださいね!

データベースの基本に関しても当ブログにて解説もしてますので、よろしければ読んでみてください。

以上です!

-データベース