sp_updatestats (Transact-SQL)
適用対象: SQL Server
Azure SQL Database
現在のデータベースのすべてのユーザー定義テーブルと内部テーブルに対して UPDATE STATISTICS
を実行します。
UPDATE STATISTICS
の詳細については、「UPDATE STATISTICS (Transact-SQL)」を参照してください。 統計の詳細については、「統計」を参照してください。
構文
sp_updatestats [ [ @resample = ] 'resample' ]
リターン コードの値
0
(成功) または 1
(失敗)。
引数
[ @resample = ] 'resample'
sp_updatestats
が UPDATE STATISTICS ステートメントのRESAMPLE
オプションを使用することを指定します。 resample
が指定されていない場合、sp_updatestats
は既定のサンプリングを使用して統計を更新します。 resample
引数はvarchar(8)で、既定値は NO
です。
解説
sp_updatestats
は、データベース内のすべてのユーザー定義テーブルと内部テーブルに対して ALL
キーワードを指定して、UPDATE STATISTICS
を実行します。 sp_updatestats
は、進行状況を示すメッセージを表示します。 更新が完了すると、すべてのテーブルの統計が更新されたことを報告します。
sp_updatestats
は、無効な非クラスター化インデックスの統計を更新し、無効なクラスター化インデックスの統計を更新しません。
ディスク ベースのテーブルの場合、sp_updatestats
sys.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 個以上のデータベースに対するインデックスの最適化と統計更新を自動管理します。 このプロシージャでは、断片化レベルやその他のパラメーターに基づいてインデックスを再構築または再構成するか、線形しきい値で統計を更新するかが自動的に選択されます。