インデックス入門

インデックス入門:どの条件・どの並び替えに効くか(最小限の考え方)

この記事で分かること

  • インデックスが「どの条件(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. 手元の表に1本、インデックスを付けて EXPLAIN で「Index Scan」などになるか確認する
  2. 複数列(例:customer_id,
    ordered_at)のインデックスを作り、WHERE customer_id = ? AND ordered_at > ?
    で計画がどう変わるか見る

次に読む

タイトルとURLをコピーしました