はじめに
SQL Serverでパフォーマンスチューニングをしていると、「統計情報(Statistics)」という言葉をよく目にします。
ただ、「そもそも統計情報って何?」「UPDATE STATISTICSはいつ実行すればいいの?」と疑問に思ったことはないでしょうか。
本記事では、統計情報の基本からUPDATE STATISTICSの仕組み、自動更新の挙動、実務での使いどころまでを初級者向けに整理します。
なお、インデックス再構築時の統計情報の扱い(フルスキャン更新)については、以下の記事で解説しています。
SQL Serverのインデックス再構築と統計情報の関係|フルスキャンの挙動を解説
結論:統計情報は実行計画を左右する重要な要素
SQL Serverは、統計情報をもとにクエリの実行計画(どのインデックスを使うか、フルスキャンするか等)を決定します。
そのため、統計情報が古いと誤った見積もりが行われ、非効率な実行計画が選ばれてパフォーマンス低下につながることがあります。
統計情報とは何か
統計情報とは、テーブルやインデックス内のデータ分布を要約した情報です。
主に以下のような内容が保持されます。
・行数(件数)
・値の分布(ヒストグラム)
・データの偏りや選択性
SQL Serverはこれらを使って、述語の選択性(どれくらい絞り込めるか)を推定し、最適なアクセス方法を選択します。
言い換えると、統計情報は「最適な検索経路を決めるための地図」です。
UPDATE STATISTICSとは
UPDATE STATISTICSは、統計情報を最新化するためのコマンドです。
UPDATE STATISTICS テーブル名;
データの追加・更新・削除が続くと統計情報は徐々に古くなります。
手動で更新することで、オプティマイザがより正確な見積もりに基づいて実行計画を選べるようになります。
※構文やオプション(FULLSCAN / SAMPLE など)の詳細は公式ドキュメントを参照してください。

統計情報の自動更新の仕組み(AUTO UPDATE STATISTICS)
SQL Serverでは、統計情報の自動更新(AUTO UPDATE STATISTICS)が既定で有効です。
一定の変更量に達すると、クエリ実行時などのタイミングで自動的に統計情報が更新されます。
ポイントは次のとおりです。
・変更量のしきい値を超えたときに発動
・多くの場合サンプリングで更新(フルスキャンではない)
・更新は同期/非同期の設定に依存(AUTO_UPDATE_STATISTICS_ASYNC)
しきい値はテーブルの規模に依存し、小規模テーブルでは比較的早く発動し、大規模テーブルでは変更率ベースで判断されます(バージョンにより計算式は最適化されています)。
そのため、
・更新頻度が低い(しきい値に届かない)
・精度が十分でない(サンプリング)
といった理由で、自動更新だけでは最適な状態を維持できないケースがあります。
少し情報が古いですが、Microsoftのブログに参考になる説明がありました。

実行タイミングと注意点(実務)
UPDATE STATISTICSは有効ですが、使いどころが重要です。
実行を検討するタイミング
・大量データの投入・更新後
・急な性能劣化が発生したとき
・定期メンテナンスで補完したいとき
注意点(やりすぎNG)
・ピーク時間帯の実行は避ける(CPU/I/O負荷が上がる)
・大規模テーブルでのFULLSCANは特に高負荷
・頻繁な実行は逆効果(無駄なコスト増)
実務では、
・通常は自動更新に任せる
・必要時のみ手動で補完する
というバランスが現実的です。
まとめ
SQL ServerのUPDATE STATISTICSは、実行計画の精度を保つための重要なメンテナンスです。
・統計情報はクエリ最適化の基準になる
・自動更新は便利だが万能ではない
・必要に応じて手動更新で補完する
この考え方を押さえておくことで、安定したパフォーマンス運用につながります。
インデックスが効かないケースについては、以下の記事も参考になります。


コメント