はじめに
SQLを書いていると「インデックスを付けると速くなる」とよく聞くと思います。
しかし、半分正しくて半分間違いです。
→ インデックスは、付け方を間違えると逆に遅くなります。
今回は、実際のテーブルをもとに「どう考えればいいのか」をシンプルに解説します。
そもそもインデックスって何?
ざっくり言うと、
→ データを探しやすくするための目次みたいなもの
本で例えると:
インデックスなし → 1ページずつ探す(遅い)
インデックスあり → 目次から探す(速い)
じゃあ全部に付ければいいのでは?
ここが落とし穴です。
インデックスにはデメリットもあります
データを追加・更新するときに時間がかかる
ストレージを使う
無駄なインデックスは逆に遅くなることもある
→ つまり「必要なものだけ付ける」のが正解です
よくあるNGパターン①:使ってないインデックス
例えばこんなインデックス:
idx_update_id (update_id)
でも、
update_idで検索していない
JOINにも使っていない
→ こういう場合は意味がありません
結論:使ってないなら削除でOK
よくあるNGパターン②:複合インデックスのつけすぎ
こんなケース↓
(ranking_id, article_count)
でも実際のクエリは:
WHERE ranking_id = 1
→ article_count使ってない
この場合はこうでOK:
(ranking_id)
ポイント:
インデックスは「左から使われる」
使わないカラムを入れると無駄になる
よくあるNGパターン③:なんとなく日付に付ける
(updated_date)
ありがちですが、
日付で検索してない
並び替えにも使ってない
→ これも不要です
じゃあどう考えればいいの?
超シンプルに言うとこれだけ↓
→ 「どんなSQLで検索してるか」を見る
チェックポイント:
WHEREにあるカラム
JOINに使ってるカラム
ORDER BYに使ってるカラム
これにだけインデックスを付ければOKです。
JISOUのメンバー募集中!
プログラミングコーチングJISOUでは、新たなメンバーを募集しています。日本一のアウトプットコミュニティでキャリアアップしませんか?
興味のある方は、ぜひホームページをのぞいてみてください!