こんにちは、阿久梨絵です!
「 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力が一段上がりますよ。
阿久梨絵でした!
