変更要約: DP-300 第3章を深掘り(図ja化・比較表/シナリオ/FAQ/ひっかけ/深掘り段落を全節に追加)
3.2クエリとインデックスの最適化
実行プランの読み方、インデックス(不足/未使用/断片化)、統計、そして自動チューニングや インテリジェントクエリ処理 による最適化を理解します。計測の次は改善です。
ボトルネックを特定したら、インデックスやクエリを見直して改善します。Azure SQL は自動チューニングなどの支援も提供します。
3.2.1最適化の手段
- 実行プラン:コストの高い演算子やスキャン vs シークを見て、非効率を特定する。
- インデックス:不足インデックスの作成・未使用/重複の削除・断片化の再構成、統計の更新を行う。
- 自動チューニング:推奨インデックスの自動適用や、劣化したプランの強制修正(plan forcing)。
- インテリジェントクエリ処理:適応的結合などでクエリ性能を自動的に改善する。
「不足インデックスの作成/未使用の削除/断片化の再構成」「推奨の自動適用・悪いプランの強制修正=自動チューニング」「実行プランのスキャン vs シーク」「Query Store+自動チューニングで劣化を是正」 は DP-300 で頻出です。テーブルスキャンが多いならインデックス見直しの候補です。
統計が古いと最適な実行プランが選ばれにくくなります。データ変更が多いテーブルでは統計の更新も最適化の一部です。
インデックスは用途で選びます。クラスター化インデックス(テーブルあたり 1 つ・行を物理順序づけ)と 非クラスター化インデックス(複数可・キー+必要列を INCLUDE)、検索条件に合わせた カバリングインデックス、部分集合を絞る フィルター選択インデックス、列指向の分析向け 列ストアインデックス があります。不足は 不足インデックスの DMV/推奨、未使用/重複は sys.dm_db_index_usage_stats で判断し、断片化は REORGANIZE(オンライン・軽度) か REBUILD(重度・オンライン可)、最適性は 統計の更新 で担保します。クエリ側は実行プランで スキャン→シーク、キールックアップ・暗黙の型変換・SARGable でない述語(列に関数適用)を疑い、必要に応じて書き換えます。Azure SQL の 自動チューニング(CREATE/DROP INDEX 推奨の自動適用、FORCE LAST GOOD PLAN)と インテリジェントクエリ処理(適応的結合・バッチモード・メモリ許可フィードバック等)が下支えします。インデックスは読み取りを速める一方で書き込み/容量のコストになるため、作り過ぎないバランスが要点です。
| インデックス種別 | 特徴 | 向く用途 |
|---|---|---|
| クラスター化 | テーブルに1つ・行を物理順序づけ | 範囲検索・主キー |
| 非クラスター化 | 複数可・INCLUDE で列追加 | 特定条件の検索・カバリング |
| 列ストア | 列指向・圧縮・集計に強い | 分析/DWH ワークロード |
| フィルター選択 | 行の部分集合に限定 | 一部値に偏る検索 |
シナリオ: 特定の WHERE 条件のクエリが毎回テーブルスキャンで遅い。→ 実行プランでスキャンを確認し、検索キー+取得列を INCLUDE したカバリング非クラスター化インデックスを作成してシークに変えます。書き込み負荷とのバランスを見て、未使用インデックスは DMV で確認し削除。劣化が起きたら自動チューニングの plan forcing で安定化します。
FAQ: Q. 断片化は REORGANIZE と REBUILD どちらで直す? → A. 軽度はオンラインで軽量な REORGANIZE、重度は REBUILD(統計も更新・オンライン可)。Q. インデックスは多いほど良い? → A. いいえ。読み取りは速くなるが書き込み/容量のコストが増えるため、未使用は削除しバランスを取ります。
ひっかけ: 「インデックスは多ければ多いほど速くなる」は誤りです。読み取りは速くなる反面、INSERT/UPDATE/DELETE と容量のコストが増え、未使用/重複はむしろ害。また「列に関数を適用した条件(例 WHERE YEAR(col)=2024)でもインデックスが効く」も誤り(SARGable でないためシークが効かない)。
3.2.2この節のまとめ
- 最適化=実行プラン→インデックス/統計→自動チューニング
- 支援=自動チューニング・インテリジェントクエリ処理
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. あるクエリが頻繁にテーブルスキャンを行い遅い。まず検討すべき改善はどれですか?
Q2. 推奨インデックスの自動適用や、劣化した実行プランの強制修正を行う Azure SQL の機能はどれですか?
Q3. インデックスの断片化が進み性能が低下している。一般的な対処はどれですか?

