🦔

データベースのインデックスとは?初心者向けに種類と使い方を解説!

2025/02/28に公開

データベースを使っていると、「クエリの実行が遅い…」「データ量が増えると検索に時間がかかる…」と感じることがあるかもしれません。
そんなときに役立つのが 「インデックス(索引)」 です。

この記事では、 インデックスの仕組みと種類 について、初心者にもわかりやすく解説していきます!


🔹 1. インデックス(Index)とは?

📌 インデックスの役割

インデックスとは、データ検索を高速化するための仕組み です。
本の「索引」と同じようなもので、データベース内の特定の行をすばやく見つける ために使われます。

例えば、辞書を引くときに 最初から1ページずつ探す よりも、「あ行・か行・さ行…」の索引を使った方が速く探せますよね?
データベースのインデックスも同じで、インデックスを作ると、データベースが検索を効率的に行える ようになります。


🔹 2. インデックスの種類と使い方

データベースには、用途に応じた さまざまな種類のインデックス があります。
ここでは、代表的な 5種類のインデックス を詳しく解説します!


✅ 2-1. 主キーインデックス(Primary Key Index)

📌 特徴

  • 主キー(PRIMARY KEY)に設定すると、自動的に作成されるインデックス
  • 一意性(ユニーク)を保証 し、NULLを許可しない
  • クエリの検索性能を向上させる

📌 使い方

CREATE TABLE users (
    id INT PRIMARY KEY,  -- 主キーインデックスが自動的に作成される
    name VARCHAR(100),
    email VARCHAR(100)
);

📌 どんなときに使う?

  • 各行を一意に識別するために使用(例:idカラム)
  • 主キーを使った検索が多い場合に有効

📌 注意点

  • 主キーに設定すると、自動的にインデックスが作成されるため、明示的にインデックスを追加する必要はない

✅ 2-2. ユニークインデックス(Unique Index)

📌 特徴

  • 一意性を保証するインデックス(重複を防ぐ)
  • NULL を許可することができる(ただし、データベースによって動作が異なる)

📌 使い方

CREATE TABLE users (
    id INT PRIMARY KEY,
    email VARCHAR(100) UNIQUE  -- ユニークインデックスが作成される
);

または、すでにテーブルがある場合:

CREATE UNIQUE INDEX idx_users_email ON users(email);

📌 どんなときに使う?

  • メールアドレスやユーザー名など、重複してはいけないデータ に使用
  • データの整合性を保証しつつ、高速な検索を実現

📌 注意点

  • 一意制約があるため、重複するデータを挿入できない
  • NULL の扱いに注意(DBエンジンによっては NULL を複数回許可することがある)

✅ 2-3. 通常インデックス(Index)

📌 特徴

  • 検索を高速化するために手動で作成するインデックス
  • 主キーやユニーク制約がないカラムにも適用可能

📌 使い方

CREATE INDEX idx_users_name ON users(name);

📌 どんなときに使う?

  • WHERE 句で頻繁に検索されるカラム に使用(例:nameemail
  • JOIN や ORDER BY のパフォーマンスを向上 させる

📌 注意点

  • INSERT / UPDATE / DELETE の速度が低下する(インデックスの更新が必要になるため)
  • 不要なインデックスを作りすぎると、パフォーマンスが悪化する

✅ 2-4. 複合インデックス(Composite Index)

📌 特徴

  • 複数のカラムを組み合わせたインデックス
  • 複数の条件を組み合わせた検索を高速化できる

📌 使い方

CREATE INDEX idx_users_name_email ON users(name, email);

📌 どんなときに使う?

  • 複数のカラムを条件にした検索が多い場合
    SELECT * FROM users WHERE name = 'Tanaka' AND email = 'tanaka@example.com';
    
  • ORDER BY で並び替えが多い場合

📌 注意点

  • インデックスの順番が重要name, email の順番で作った場合、email 単体の検索には最適化されない)

✅ 2-5. 全文検索インデックス(Full-Text Index)

📌 特徴

  • テキスト検索に特化したインデックス
  • 部分一致検索(LIKE '%文字列%')より高速
  • 検索結果のスコアリングが可能

📌 使い方(MySQL)

CREATE FULLTEXT INDEX idx_users_bio ON users(bio);

検索するとき:

SELECT * FROM users WHERE MATCH(bio) AGAINST('エンジニア');

📌 どんなときに使う?

  • 記事・ブログ・コメントなど、長文のテキスト検索
  • 通常のインデックスでは対応できない「単語単位」の検索

📌 注意点

  • データの更新が頻繁な場合はパフォーマンスに影響が出る
  • データベースによっては全文検索をサポートしていない(例:SQLite)

🔹 3. インデックスを使うときの注意点

インデックスは便利ですが、適切に使わないと逆にパフォーマンスが悪化することがあります。

適切なインデックス設計のポイント

  • 頻繁に検索するカラムにインデックスを付ける
  • 更新が多いカラムには慎重にインデックスを付ける
  • EXPLAIN コマンドを使って、クエリの実行計画を確認する
EXPLAIN SELECT * FROM users WHERE name = 'Tanaka';

→ どのインデックスが使われているかをチェック!


🔹 まとめ

インデックスの種類 特徴
主キーインデックス PRIMARY KEY に設定すると自動で作成される
ユニークインデックス 一意性を保証する (UNIQUE)
通常インデックス 検索を高速化する一般的なインデックス
複合インデックス 複数のカラムを組み合わせて検索を高速化
全文検索インデックス テキスト検索に特化し、スコアリングが可能

インデックスを適切に活用すれば、データベースのパフォーマンスを大幅に向上 できます!
ぜひ実際のプロジェクトでも試してみてください! 🚀

Discussion