対象者:SQL Server
Azure SQL Database
Microsoft FabricにおけるSQLデータベース
現在のデータベースのすべてのユーザー定義テーブルと内部テーブルに対して UPDATE STATISTICS を実行します。
UPDATE STATISTICSの詳細については、「UPDATE STATISTICS」を参照してください。 統計の詳細については、「統計」を参照してください。
構文
sp_updatestats [ [ @resample = ] 'resample' ]
リターン コードの値
0 (成功) または 1 (失敗)。
引数
[ @resample = ] 「リサンプル」
sp_updatestatsが RESAMPLE ステートメントの オプションを使用することを指定します。
resampleが指定されていない場合、sp_updatestatsは既定のサンプリングを使用して統計を更新します。
resample引数はvarchar(8)で、既定値は NO です。
解説
sp_updatestatsは、データベース内のすべてのユーザー定義テーブルと内部テーブルに対して UPDATE STATISTICS キーワードを指定して、ALLを実行します。
sp_updatestats は、進行状況を示すメッセージを表示します。 更新が完了すると、すべてのテーブルの統計が更新されたことを報告します。
sp_updatestats は、無効な非クラスター化インデックスの統計を更新し、無効なクラスター化インデックスの統計を更新しません。
ディスク ベースのテーブルの場合、sp_updatestatsmodification_counter カタログ ビューの情報に基づいて統計を更新し、少なくとも 1 つの行が変更された統計を更新します。 メモリ最適化テーブルの統計は、 sp_updatestatsの実行時に常に更新されます。 そのため、必要以上に sp_updatestats 実行しないでください。
sp_updatestats では、ストアド プロシージャまたはその他のコンパイル済みコードの再コンパイルをトリガーできます。 ただし、参照されているテーブルとそのインデックスに対して 1 つのクエリ プランしか使用できない場合は、 sp_updatestats が再コンパイルされない可能性があります。 このような場合は、統計が更新されても再コンパイルの必要はありません。
sp_updatestats は、特定の統計の最新の NORECOMPUTE オプションを保持します。 統計の更新の無効化および再有効化について詳しくは、「統計」をご覧ください。
以前のバージョンから SQL Server 2022 (16.x) にデータベースを復元する場合は、データベースに対して sp_updatestats を実行する必要があります。 これは、SQL Server 2022 (16.x) で導入された統計自動ドロップ機能の適切なメタデータの設定に関連しています。 Azure SQL Database、Azure SQL Managed Instance、および SQL Server 2022 (16.x) 以降のバージョンでは、自動的に作成された統計は、 AUTO_DROP が設定されているかのように常に動作します。
アクセス許可
SQL Server の場合は、データベースの所有者 (dbo) であるか、固定サーバー ロールsysadmin のメンバーである必要があります。
Azure SQL Database の場合は、 db_owner 固定データベース ロールのメンバーである必要があります。
例
次の例では、データベースのすべてのテーブルの統計を更新します。
USE AdventureWorks2022;
GO
EXECUTE sp_updatestats;
インデックスと統計の自動管理
Adaptive Index Defrag のようなソリューションを活用し、1 個以上のデータベースに対するインデックスの最適化と統計更新を自動管理します。 このプロシージャでは、断片化レベルやその他のパラメーターに基づいてインデックスを再構築または再構成するか、線形しきい値で統計を更新するかが自動的に選択されます。