Tech Blog

プログラミングと技術の情報サイト

MySQLインデックスの仕組みとパフォーマンスチューニング

MySQLインデックスの仕組みとパフォーマンスチューニング

データベースのパフォーマンスを改善する上で、インデックスの理解は欠かせません。 適切なインデックス設計により、クエリの実行速度を劇的に向上させることができます。

インデックスとは

インデックスは、テーブルのデータを高速に検索するためのデータ構造です。 MySQLではB-treeインデックスが主に使われており、大量のデータからも O(log n)の計算量でレコードを見つけることができます。

インデックスの作成

-- 単一カラムインデックス
CREATE INDEX idx_email ON users(email);

-- 複合インデックス
CREATE INDEX idx_name_age ON users(last_name, first_name);

-- ユニークインデックス
CREATE UNIQUE INDEX idx_unique_email ON users(email);

EXPLAINで実行計画を確認

クエリがインデックスを使っているか確認するには EXPLAIN を使います。

EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';

出力の type カラムが refconst になっていればインデックスが効いています。 ALL の場合はフルテーブルスキャンが発生しているため、インデックスの追加を検討してください。

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

  1. WHERE句でカラムに関数を適用している(例: WHERE YEAR(created_at) = 2026
  2. LIKE検索で前方一致でない場合(例: WHERE name LIKE '%太郎'
  3. カーディナリティが低いカラム(フラグ系のカラムなど)

まとめ

インデックスは強力ですが、更新・挿入時のオーバーヘッドも増加します。 必要なカラムにのみ設定し、定期的に不要なインデックスを見直すことが大切です。

← 記事一覧に戻る