sp_updatestats (Transact-SQL)

適用対象: SQL Server Azure SQL データベース

現在のデータベースのすべてのユーザー定義テーブルと内部テーブルに対して UPDATE STATISTICS を実行します。

UPDATE STATISTICSの詳細については、「UPDATE STATISTICS」を参照してください。 統計の詳細については、「統計」を参照してください。

Transact-SQL 構文表記規則

構文

sp_updatestats [ [ @resample = ] 'resample' ]

リターン コードの値

0 (成功) または 1 (失敗)。

引数

[ @resample = ] 'resample'

sp_updatestatsUPDATE STATISTICS ステートメントのRESAMPLE オプションを使用することを指定します。 resampleが指定されていない場合、sp_updatestatsは既定のサンプリングを使用して統計を更新します。 resample引数はvarchar(8)で、既定値は NO です。

解説

sp_updatestatsは、データベース内のすべてのユーザー定義テーブルと内部テーブルに対して ALL キーワードを指定して、UPDATE STATISTICSを実行します。 sp_updatestats は、進行状況を示すメッセージを表示します。 更新が完了すると、すべてのテーブルの統計が更新されたことを報告します。

sp_updatestats は、無効な非クラスター化インデックスの統計を更新し、無効なクラスター化インデックスの統計を更新しません。

ディスク ベースのテーブルの場合、sp_updatestatssys.dm_db_stats_properties カタログ ビューのmodification_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) 以降で使用できます。

アクセス許可

SQL Server の場合は、データベースの所有者 (dbo) であるか、固定サーバー ロールsysadmin のメンバーである必要があります。

Azure SQL Database の場合は、 db_owner 固定データベース ロールのメンバーである必要があります。

次の例では、データベースのすべてのテーブルの統計を更新します。

USE AdventureWorks2022;
GO
EXEC sp_updatestats;

インデックスと統計の自動管理

Adaptive Index Defrag のようなソリューションを活用し、1 個以上のデータベースに対するインデックスの最適化と統計更新を自動管理します。 このプロシージャでは、断片化レベルやその他のパラメーターに基づいてインデックスを再構築または再構成するか、線形しきい値で統計を更新するかが自動的に選択されます。