Instiq
第3章 · データベースリソースの監視・構成・最適化·v2.0.0·更新 2026/6/3·読了目安 約9分

変更要約: DP-300 第3章を深掘り(図ja化・比較表/シナリオ/FAQ/ひっかけ/深掘り段落を全節に追加)

3.2クエリとインデックスの最適化

この節の要点

実行プランの読み方、インデックス(不足/未使用/断片化)、統計、そして自動チューニングや インテリジェントクエリ処理 による最適化を理解します。計測の次は改善です。

ボトルネックを特定したら、インデックスクエリを見直して改善します。Azure SQL は自動チューニングなどの支援も提供します。

3.2.1最適化の手段

クエリ最適化の流れを示した図。実行プランの確認(コストの高い演算子・スキャン vs シーク)→インデックスの見直し(不足インデックスの作成・未使用/重複の削除・断片化の再構成、統計の更新)→自動チューニング(推奨インデックスの自動適用・悪い実行プランの強制修正 plan forcing)→インテリジェントクエリ処理(適応的結合など)。
クエリとインデックスの最適化
  • 実行プラン:コストの高い演算子やスキャン 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. インデックスの断片化が進み性能が低下している。一般的な対処はどれですか?

理解度を確認第3章「データベースリソースの監視・構成・最適化」の問題を解く