DBインデックスとパフォーマンスチューニング

検索を高速化するインデックスの仕組みと適切な使い方を学びます。

大量データのDBで検索を高速化する「インデックス」。種類と適切な貼り方、性能チューニングの基本を学びます。

日野 こむぎ(普段) 日野 こむぎ

DBの検索ってさ、どうやって速くしてるの?

藤森 さやか 先生(笑顔) 藤森 さやか 先生

インデックスよ。
本の索引と同じ発想で、特定列の検索を O(n) から O(log n) に高速化するの。

青木 澪(普段) 青木 澪

代表的な内部構造はB木インデックス (B-tree)。
範囲検索 (BETWEEN・大小比較) も高速化できる万能型ね。
完全一致専用のハッシュインデックスもあるわ。

桃井 すみれ(普段) 桃井 すみれ

じゃあ全部の列に貼っちゃえばいいのぉ?

青木 澪(普段) 青木 澪

それはダメなの。
インデックスは検索を速くする一方で、INSERT/UPDATE/DELETEを遅くするし、容量も食うのよ。
WHERE句やJOINで頻繁に使う列だけに絞るのが鉄則ね。

藤森 さやか 先生(普段) 藤森 さやか 先生

DBチューニングの基本ステップ: 1.実行計画 (EXPLAIN) を確認 → 2. インデックス追加 → 3. 統計情報の更新 → 4. クエリ書換え (サブクエリ→JOINなど)。

青木 澪(普段) 青木 澪

アンチパターンも覚えておいて。
WHERE句の列に関数を使う (例: WHERE LOWER(name) = ...) とインデックスが効かないの。
LIKE '%xxx' (前方ワイルドカード) も同じよ。

日野 こむぎ(笑い) 日野 こむぎ

インデックス1つで性能がガラッと変わるんだね!

確認クイズ

DBインデックスを大量に追加することの欠点として、最も適切なものはどれか。

  1. 検索が遅くなる
  2. INSERT/UPDATE/DELETE 性能が低下する
  3. テーブルが消える
  4. JOIN ができなくなる
こたえを見る

正解: 2. INSERT/UPDATE/DELETE 性能が低下する

インデックスは検索を高速化しますが、データ更新時にインデックス自体も更新する必要があるため INSERT/UPDATE/DELETE が遅く なります。容量も増えるため、必要な列にだけ絞って作るのが原則です。

🔖 この記事の関連書籍

Amazonアソシエイトリンクを含みます。他分野は おすすめ書籍ページ へ。