sp_updatestats (Transact-SQL)

適用対象:SQL ServerAzure SQL Database

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

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

Transact-SQL 構文表記規則

構文

sp_updatestats [ [ @resample = ] 'resample' ]

リターン コードの値

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

引数

[ @resample = ] 'resample'

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

解説

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

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

ディスク ベース テーブルの場合、 sp_updatestats sys.dm_db_stats_properties カタログ ビューの情報にmodification_counter基づいて統計を更新し、少なくとも 1 つの行が変更された統計を更新します。 メモリ最適化テーブルの統計は、実行時 sp_updatestatsに常に更新されます。 そのため、必要以上に実行 sp_updatestats しないでください。

sp_updatestats では、ストアド プロシージャまたはその他のコンパイル済みコードの再コンパイルをトリガーできます。 ただし、 sp_updatestats 参照されているテーブルとそのインデックスに対して 1 つのクエリ プランしか使用できない場合は、再コンパイルが発生しない可能性があります。 このような場合は、統計が更新されても再コンパイルの必要はありません。

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 個以上のデータベースに対するインデックスの最適化と統計更新を自動管理します。 このプロシージャでは、断片化レベルやその他のパラメーターに基づいてインデックスを再構築または再構成するか、線形しきい値で統計を更新するかが自動的に選択されます。