0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【備忘録】インデックスって何?つけすぎると逆に遅くなる話

0
Last updated at Posted at 2026-04-27

はじめに

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では、新たなメンバーを募集しています。
日本一のアウトプットコミュニティでキャリアアップしませんか?
興味のある方は、ぜひホームページをのぞいてみてください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?