sp_createstats (Transact-SQL)

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance

CREATE STATISTICS ステートメントを呼び出して、統計オブジェクトの最初の列ではない列に対して単一列の統計を作成します。 統計を 1 列ずつ作成すると、ヒストグラムの数が増えて、カーディナリティの推定、クエリ プラン、およびクエリのパフォーマンスが向上します。 統計オブジェクトの最初の列にはヒストグラムがあります。他の列にはヒストグラムがありません。

sp_createstats は、クエリの実行時間が重要であり、クエリ オプティマイザーが単一列の統計を生成するのを待てない場合のベンチマークなどのアプリケーションに役立ちます。 ほとんどの場合、 sp_createstatsを使用する必要はありません。クエリ オプティマイザーは、 AUTO_CREATE_STATISTICS オプションがオンのときにクエリ プランを改善するために、必要に応じて単一列の統計を生成します。

統計の詳細については、「統計」を参照してください。 単一列統計の生成の詳細については、ALTER DATABASE SET オプションのAUTO_CREATE_STATISTICSオプションを参照してください。

Transact-SQL 構文表記規則

構文

sp_createstats
    [ [ @indexonly = ] 'indexonly' ]
    [ , [ @fullscan = ] 'fullscan' ]
    [ , [ @norecompute = ] 'norecompute' ]
    [ , [ @incremental = ] 'incremental' ]
[ ; ]

引数

[ @indexonly = ] 'indexonly'

既存のインデックス内にあり、インデックス定義の最初の列ではない列にのみ統計を作成します。 @indexonlychar(9) で、既定値は NO です。

[ @fullscan = ] 'fullscan'

CREATE STATISTICS ステートメントを FULLSCAN オプションと共に使用します。 @fullscanchar(9) で、既定値は NO です。

[ @norecompute = ] 'norecompute'

CREATE STATISTICS ステートメントを NORECOMPUTE オプションと共に使用します。 @norecomputechar(12) で、既定値は NO です。

[ @incremental = ] 'incremental'

CREATE STATISTICS ステートメントを INCREMENTAL = ON オプションと共に使用します。 @incrementalchar(12) で、既定値は NO です。

リターン コードの値

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

結果セット

新しい統計オブジェクトはそれぞれ、作成される列と同じ名前を持ちます。

解説

sp_createstats では、既存の統計オブジェクトの最初の列である列の統計は作成または更新されません。 これには、インデックス用に作成された統計の最初の列、 AUTO_CREATE_STATISTICS オプションで生成された単一列の統計を含む列、および CREATE STATISTICS ステートメントで作成された統計の最初の列が含まれます。 sp_createstats では、その列が別の有効なインデックスで使用されていない限り、無効になっているインデックスの最初の列に関する統計は作成されません。 sp_createstats では、クラスター化インデックスが無効になっているテーブルの統計は作成されません。

テーブルに列セットが含まれている場合、 sp_createstats はスパース列の統計を作成しません。 列セットとスパース列の詳細については、「 列セットの使用スパース列の使用を参照してください。

アクセス許可

db_owner 固定データベース ロール内でメンバーシップが必要です。

A. 条件を満たすすべての列の統計を 1 列ずつ作成する

次の例では、現在のデータベース内のすべての有効な列に対して単一列の統計を作成します。

EXEC sp_createstats;
GO

B. 条件を満たすすべてのインデックス列の統計を 1 列ずつ作成する

次の例では、インデックスに既に存在し、インデックスの最初の列ではないすべての有効な列に対して単一列の統計を作成します。

EXEC sp_createstats 'indexonly';
GO