大量データの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インデックスを大量に追加することの欠点として、最も適切なものはどれか。
- 検索が遅くなる
- INSERT/UPDATE/DELETE 性能が低下する
- テーブルが消える
- JOIN ができなくなる
こたえを見る
正解: 2. INSERT/UPDATE/DELETE 性能が低下する
インデックスは検索を高速化しますが、データ更新時にインデックス自体も更新する必要があるため INSERT/UPDATE/DELETE が遅く なります。容量も増えるため、必要な列にだけ絞って作るのが原則です。