次の方法で共有


sp_updatestats (Transact-SQL)

適用対象:SQL ServerAzure SQL データベース

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

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

Transact-SQL 構文表記規則

構文

sp_updatestats [ [ @resample = ] 'resample' ]

リターン コードの値

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

引数

[ @resample = ] 'resample'

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