第5章 · 性能設計とチューニング·v1.0.0·更新 2026/7/10·読了目安 約17分
変更要約: 初版
5.2実行計画とオプティマイザ
この節の要点
DBMSが問合せの実行方法を自動で選ぶコストベース最適化の仕組み、その判断材料となる統計情報、複数テーブルの結合方式(ネステッドループ結合・ソートマージ結合・ハッシュ結合)の使い分け、そして全表走査とインデックススキャンのどちらが有利かを見極める判断を学びます。
アプリケーション開発者やDBAにとって、SQL文そのものが正しくても実行が遅い場合、原因はDBMSがどの手順(実行計画)でその問合せを処理しているかにあります。この節では、DBMSが「どの実行計画が最も速いか」を推定する仕組みであるオプティマイザの考え方と、実行計画を読み解いて遅いクエリを改善する判断力を学びます。
5.2.1コストベース最適化と統計情報
- コストベース最適化(CBO:Cost-Based Optimization)=同じ結果を得られる複数の実行計画候補(どのインデックスを使うか・どの結合方式にするか等)について、それぞれのI/O・CPUコストを見積もり、推定コストが最小の計画を選ぶ方式。現代の主要なRDBMSはこの方式を採用している。
- コスト見積もりの精度は統計情報(列ごとの値の分布・行数・NULL率・インデックスの選択性等をDBMSが収集したメタデータ)の鮮度に大きく依存する。大量の一括更新・削除の直後など統計情報が古いままだと、実際とかけ離れた行数を見積もり、不適切な実行計画(本来インデックスを使うべき所で全表走査を選ぶ等)を選んでしまうリスクがある。統計情報の再収集(
ANALYZE等)を運用に組み込むことが重要になる。
5.2.2結合方式(ネステッドループ/ソートマージ/ハッシュ結合)
- ネステッドループ結合=外側のテーブルの各行に対して、内側のテーブルを繰り返し検索して一致行を探す方式。内側テーブルの結合列にインデックスがあれば非常に高速だが、インデックスがなければ内側テーブルを行数分繰り返し全表走査することになり、両テーブルが大きいと極めて遅くなる。外側テーブルの行数が少ない場合に向く。
- ソートマージ結合=両テーブルを結合列であらかじめソートしたうえで、ソート済みの2つの列を先頭から同時に走査してつき合わせる方式。ソート自体にコストがかかるが、既にソート済み(インデックス経由等)であれば効率的。ハッシュ結合=小さい方のテーブルの結合列からハッシュテーブルを構築し、大きい方のテーブルの各行についてハッシュテーブルを参照して一致を探す方式。等価結合(
=)に強く、大量データ同士の結合でインデックスが使えない場合でも比較的高速だが、ハッシュテーブル構築にメモリを要する。

