SQL Serverのインデックス再構築と統計情報の関係|フルスキャンの挙動を解説

SQL Serverのインデックス再構築と統計情報の関係|フルスキャンの挙動を解説 SQL Server

はじめに

SQL Serverでパフォーマンスを意識し始めると、インデックスのメンテナンスとあわせて「統計情報」の扱いが気になってくることがあります。

特に、「REBUILD(インデックス再構築)をすると統計情報はどうなるのか?」という点は、実務でも意外と見落とされがちです。

本記事では、インデックス再構築時の統計情報の挙動と、フルスキャンとの関係について整理します。


結論:REBUILD時は統計情報がフルスキャンで更新される

SQL Serverでは、インデックスをREBUILDすると、そのインデックスに紐づく統計情報も同時に更新されます。

このとき、統計情報はフルスキャン(全件読み取り)で更新されるのが特徴です。

つまり、インデックスを作り直す処理の中で、データ全体を読み込むため、高精度な統計情報が再作成されます。

※この挙動については、Microsoftの公式ドキュメントでも説明されています。

インデックスを最適に維持してパフォーマンスを向上させ、リソース使用率を削減する - SQL Server
この記事では、インデックスの管理の概念と、インデックスをメンテナンスするための推奨される戦略について説明します。

REORGANIZEとの違い

インデックスメンテナンスには、REBUILDとREORGANIZEの2つがあります。

この2つの違いのひとつが、統計情報の扱いです。

・REBUILD → 統計情報も更新(フルスキャン)
・REORGANIZE → 統計情報は更新されない

そのため、REORGANIZEだけでは統計情報が古いままになる可能性があります。

REORGANIZEとREBUILDの違いや使い分けについては、以下の記事で詳しく解説しています。

SQL ServerのREORGANIZEとREBUILDの違い|使い分けと判断基準を解説


なぜフルスキャンで更新されるのか

インデックス再構築は、インデックスを作り直す処理です。

その過程でテーブル(クラスタ化インデックス)のデータをすべて読み直すため、結果として統計情報もフルスキャン相当の精度で再作成されます。

SQL Serverでは、クラスタ化インデックスがテーブルの実体となるため、こうした動きになります。

このあたりの仕組みについては、以下の記事で詳しく解説しています。

SQL Serverにテーブル再編成(REORG)がない理由|Db2・Oracleとの違いも解説


実務でのポイント

実務では、統計情報の精度はクエリ性能に大きく影響します。

REBUILDを実行すると、

・断片化の解消
・統計情報の高精度化

が同時に行われるため、パフォーマンス改善につながるケースがあります。

一方で、REORGANIZEのみを実行した場合は統計情報が更新されないため、必要に応じて別途UPDATE STATISTICSを実行することも検討します。

統計情報の基本や手動更新については、以下の記事で解説しています。

SQL Server UPDATE STATISTICSの仕組みと実行タイミング|統計情報の基礎を解説


まとめ

SQL Serverでは、インデックス再構築(REBUILD)を実行すると、統計情報もフルスキャンで更新されます。

・REBUILD → 統計情報更新(フルスキャン)
・REORGANIZE → 統計情報更新なし

この違いを理解しておくことで、より適切なインデックスメンテナンスが可能になります。

コメント

タイトルとURLをコピーしました