インデックス入門:どの条件・どの並び替えに効くか(最小限の考え方)
この記事で分かること
- インデックスが「どの条件(WHERE)」「どの並び替え(ORDER BY)」に効くかの感覚がつかめる
- 貼り方を間違えると逆効果になり得ることを知れる
- 実行計画と組み合わせて「効いているか」を確認する流れが分かる
結論:インデックスは「列の並び」で効く
インデックスは「指定した列の順序」でデータを並べた構造です。そのため、「左からの連続した列」に対する条件や並び替えに効き、途中を飛ばした条件には効きにくい(または効かない)ことが多いです。
最小例:1列の条件に効く
-- customer_id にインデックスがあると、この条件に効きやすい
SELECT * FROM orders WHERE customer_id = 123;
- 等価(=): その列のインデックスが使われやすい
- 範囲(<, >, BETWEEN): その列までがインデックスの「左から」並んでいれば使われやすい
- ORDER BY の先頭列: インデックスの並びと一致していると、ソートを省略できることがある
複数列インデックスの考え方
- (A, B, C)
の複数列インデックスなら、「A だけ」「A と B」「A と B と C」のように左から連続した条件に効く - B だけの条件では、多くのDBMSではこのインデックスは使われない(または効きが悪い)
よくあるミス
- インデックスをたくさん貼りすぎて、更新(INSERT/UPDATE/DELETE)が遅くなる
- 「効いているはず」で実行計画を見ずに終わる(実際はフルスキャンになっていることもある)
練習問題(2問)
- 手元の表に1本、インデックスを付けて EXPLAIN で「Index Scan」などになるか確認する
- 複数列(例:customer_id,
ordered_at)のインデックスを作り、WHERE customer_id = ? AND ordered_at > ?
で計画がどう変わるか見る
