インデックスって何者? SQL が速くなる“仕組み”を調べてみました

こんにちは、阿久梨絵です!
SQL が遅い気がするんだけど…」という声、開発チームから聞こえてくることも。
その原因、どうやらインデックスの貼り方に関係しているかもしれません。

今回は「SQLのインデックスってどう貼るのが正解?」という疑問から、いろいろ調べてみました。

インデックスって何?

インデックスは、データベース内の“検索の目次”のようなもの。
本でいう「索引」があると目的のページにすぐたどり着けるように、
SQLでもインデックスがあると検索が速くなります

でも、貼りすぎたり、貼る場所を間違えると逆効果になることも…

よくある“遅いSQL”の例

SELECT * FROM orders WHERE customer_id = 123;

`customer_id`にインデックスがないと、全件検索になってしまう

SELECT * FROM logs WHERE DATE(created_at) = ‘2023-08-01’;

関数を使うとインデックスが効かない(created_atに貼っていても)

インデックス最適化のポイント

ポイント内容
WHERE句のカラムに貼る絞り込みに使うカラムはインデックス対象
JOINに使うカラムに貼るテーブル結合のキーは貼っておくと◎
関数・演算を避けるインデックスが効かなくなる
複合インデックスは順序に注意WHERE a AND bなら(a, b)の順で貼る
更新頻度が高いカラムは慎重にインデックスは更新コストがかかる

実務での“あるある”と対策

・「貼ったのに速くならない」→ 関数やLIKEで無効化されてるかも
・「貼りすぎて逆に遅い」→ インデックスは増えるほど更新が重くなる
・「どこに貼ればいいか分からない」→ 実行計画(EXPLAIN)で確認しよう

インデックスは“貼ればいい”ではなく、“使われるように貼る”のがコツです。

まとめ

インデックス最適化は、SQLのパフォーマンス改善に直結します。
実務でSQLが遅くて困っている
データ量が増えてきた
クエリチューニングに興味がある

そんな方は、まず「どこに貼るか」「どう貼るか」を見直してみてください。
EXPLAINで実行計画を確認するクセをつけると、SQL力が一段上がりますよ。
阿久梨絵でした!

上部へスクロール
Verified by MonsterInsights