sp_createstats (Transact-SQL)
CREATE STATISTICS ステートメントを呼び出して、統計オブジェクトの最初の列になっていない列の統計を 1 列ずつ作成します。統計を 1 列ずつ作成すると、ヒストグラムの数が増えて、基数の推定、クエリ プラン、およびクエリのパフォーマンスが向上します。統計オブジェクトの最初の列にはヒストグラムがありますが、その他の列にはありません。
sp_createstats は、クエリの実行時間が重要であるためにクエリ オプティマイザによって 1 列ずつの統計が生成されるのを待てないアプリケーション (ベンチマークなど) で使用できます。ほとんどの場合は、AUTO_CREATE_STATISTICS オプションがオンになっていれば、クエリ プランを改善するためにクエリ オプティマイザによって 1 列ずつの統計が必要に応じて生成されるため、sp_createstats を使用する必要はありません。
統計の詳細については、「クエリのパフォーマンスを向上させるための統計の使用」を参照してください。1 列ずつの統計の生成の詳細については、「ALTER DATABASE の SET オプション (Transact-SQL)」の AUTO_CREATE_STATISTICS オプションを参照してください。
構文
sp_createstats [ [ @indexonly = ] 'indexonly' ]
[ , [ @fullscan = ] 'fullscan' ]
[ , [ @norecompute = ] 'norecompute' ]
引数
[ @indexonly= ] 'indexonly'
既存のインデックスに含まれている、インデックス定義の最初の列にはなっていない列についてのみ、統計を作成します。indexonly のデータ型は char(9) です。既定値は NO です。[ @fullscan= ] 'fullscan'
CREATE STATISTICS ステートメントで FULLSCAN オプションを使用します。fullscan のデータ型は char(9) です。既定値は NO です。[ @norecompute= ] 'norecompute'
CREATE STATISTICS ステートメントで NORECOMPUTE オプションを使用します。norecompute のデータ型は char(12) です。既定値は NO です。
リターン コードの値
0 (成功) または 1 (失敗)
結果セット
新しい統計オブジェクトの名前は、その統計オブジェクトが作成された列の名前と同じです。
説明
sp_createstats では、既存の統計オブジェクトの最初の列になっている列の統計は、作成も更新もされません。これには、インデックスに対して作成された統計の最初の列、AUTO_CREATE_STATISTICS オプションを使用して 1 列ずつの統計が生成されている列、および CREATE STATISTICS ステートメントを使用して作成された統計の最初の列が含まれます。また、無効化されたインデックスの最初の列の統計も、その列が別の有効化されたインデックスで使用されていない限り、作成されません。無効化されたクラスタ化インデックスを持つテーブルの統計も作成されません。
テーブルに列セットが含まれている場合、sp_createstats ではスパース列に対する統計は作成されません。列セットとスパース列の詳細については、「列セットの使用」および「スパース列の使用」を参照してください。
権限
db_owner 固定データベース ロールのメンバシップが必要です。
例
A. 条件を満たすすべての列の統計を 1 列ずつ作成する
次の例では、現在のデータベースで、条件を満たすすべての列の統計を 1 列ずつ作成します。
EXEC sp_createstats;
GO
B. 条件を満たすすべてのインデックス列の統計を 1 列ずつ作成する
次の例では、既にインデックスに含まれていてインデックスの最初の列にはなっていない、条件を満たすすべての列の統計を 1 列ずつ作成します。
EXEC sp_createstats 'indexonly';
GO