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 カラムが ref や const になっていればインデックスが効いています。
ALL の場合はフルテーブルスキャンが発生しているため、インデックスの追加を検討してください。
インデックスが効かないケース
- WHERE句でカラムに関数を適用している(例:
WHERE YEAR(created_at) = 2026) - LIKE検索で前方一致でない場合(例:
WHERE name LIKE '%太郎') - カーディナリティが低いカラム(フラグ系のカラムなど)
まとめ
インデックスは強力ですが、更新・挿入時のオーバーヘッドも増加します。 必要なカラムにのみ設定し、定期的に不要なインデックスを見直すことが大切です。