Share via


CREATE STATISTICS (Transact-SQL)

テーブルまたはインデックス ビューについて指定された 1 つの列または列のセットを対象として、ヒストグラムとそれに関連する密度グループ (コレクション) を作成します。charvarcharvarchar(max)ncharnvarcharnvarchar(max)textntext 列に関して作成される統計には、文字列の概要も含まれます。クエリ オプティマイザでは、この統計情報に基づいて、データを取得または更新するための最も効率的なプランが選択されます。最新の統計情報により、オプティマイザでは異なるクエリ プランのコストを正確に評価でき、高品質のプランの選択が可能になります。SQL Server 2005 の統計情報の詳細については、Microsoft TechNet の「Microsoft SQL Server 2005 クエリ オプティマイザで使用される統計情報 (Statistics Used by the Query Optimizer in Microsoft SQL Server 2005)」を参照してください。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

CREATE STATISTICS statistics_name 
ON { table | view } ( column [ ,...n ] ) 
    [ WITH 
        [ [ FULLSCAN 
          | SAMPLE number { PERCENT | ROWS } 
          | STATS_STREAM = stats_stream ] [ , ] ] 
        [ NORECOMPUTE ] 
    ] ;

引数

  • statistics_name
    作成する統計グループの名前を指定します。統計の名前は識別子の規則に従う必要があり、統計が作成されるテーブルまたはビューに対して一意であることが必要です。
  • table
    指定した統計の作成対象となるテーブルの名前を指定します。テーブル名は識別子の規則に従っている必要があります。tablecolumn が関連付けられているテーブルです。テーブルの所有者名は省略可能です。テーブル名に修飾名を追加することで、別のデータベース内にあるテーブルの統計を作成することもできます。
  • view
    指定した統計の作成対象となるビューの名前を指定します。ビューの統計を作成するには、そのビューにクラスタ化インデックスが必要です。ビュー名は識別子の規則に従っている必要があります。viewcolumn が関連付けられているビューです。ビューの所有者名は省略可能です。ビュー名に修飾名を追加することで、別のデータベース内にあるビューの統計を作成することもできます。
  • column
    統計の作成対象となる 1 つの列または列のセットを指定します。インデックス キーとして指定できる列は統計にも指定できます。ただし、次の例外があります。

    • xml 列は指定できません。
    • 結合された列の値として許可される最大サイズは、インデックス キー値に指定されている 900 バイトの制限よりも大きくなることがあります。

    計算列は、ARITHABORT と QUOTED_IDENTIFIER データベース オプションが ON に設定されている場合にのみ指定できます。CLR ユーザー定義型の列は、データ型でバイナリ順がサポートされている場合に指定できます。ユーザー定義型列のメソッド呼び出しとして定義されている計算列は、メソッドが決定的とマークされている場合に指定できます。CLR ユーザー定義型列の作成に関する詳細については、「CLR ユーザー定義型の使用」を参照してください。

  • FULLSCAN
    統計を収集するために table または view 内のすべての行を読み取ることを指定します。FULLSCAN を指定すると、SAMPLE 100 PERCENT と同じ操作が実行されます。このオプションを SAMPLE オプションと一緒に使用することはできません。
  • SAMPLE number { PERCENT | ROWS }
    統計を収集するとき、無作為抽出で読み取るデータの一定のパーセンテージまたは行数を指定します。number には整数のみを指定できます。PERCENT の場合、number には 0 ~ 100 を指定します。ROWS の場合、number には 0 ~ n (合計行数) を指定します。

    SQL Server 2005 データベース エンジンでは、役立つ統計を確実に収集するため、常に最低限の数の値がサンプリングされます。PERCENT、ROWS、または number オプションを使用した結果、サンプリングする行数が十分でない場合、データベース エンジンではテーブルまたはビューの既存の行数に基づいて自動的にサンプリング数が補正されます。少なくとも約 1,000 データ ページがサンプリングされます。PERCENT、ROWS、または number オプションを使用した結果、有効なサンプルに必要な数よりも多くの値が得られる場合、データベース エンジンでは要求されたサンプル量に合わせて調整が行われますが、サンプルは完全データ ページのスキャンで取得されるため、実際のサンプルのサイズは指定したサイズと正確には一致しないことがあります。0 PERCENT または ROWS を指定した場合、結果は空の統計セットになります。

    SAMPLE では FULLSCAN オプションは使用できません。SAMPLE と FULLSCAN のどちらも指定しない場合、データベース エンジンによって自動サンプルが計算されます。

  • NORECOMPUTE
    データベース エンジンでは、統計を自動的に再計算しません。このオプションを指定すると、データベース エンジンではデータが変更された場合でも、以前に作成された (古い) 統計が引き続き使用されます。データベース エンジンでは統計の自動更新と管理は行われないため、最適ではないプランが作成されることがあります。

    ms188038.Caution(ja-jp,SQL.90).gif注意 :
    このオプションは最低限必要な場合にだけ使用し、資格のあるシステム管理者だけが使用することをお勧めします。
  • STATS_STREAM **=**stats_stream
    この構文は内部でのみ使用され、サポートされません。Microsoft では、この構文を予告なく変更する場合があります。

解説

テーブルの統計を作成できるのは、そのテーブルの所有者だけです。テーブル所有者は、テーブル内にデータがあるかどうかに関係なく、常に統計グループ (コレクション) を作成できます。

AUTO_UPDATE_STATISTICS データベース オプションが ON に設定されており (既定)、NORECOMPUTE 句が指定されていない場合、データベース エンジンでは手動で作成された統計が自動的に更新されます。

CREATE STATISTICS はインデックス ビューで実行できます。インデックス付きビューの統計がオプティマイザによって使用されるのは、ビューがクエリで直接参照され、そのビューに対して NOEXPAND ヒントが指定されている場合だけです。それ以外の場合は、インデックス付きビューがクエリ プランに代入される前に、基になるテーブルから統計が取得されます。この代入は Microsoft SQL Server 2005 Enterprise Edition および Developer Edition でのみサポートされています。

権限

テーブルまたはビューの ALTER 権限が必要です。

A. CREATE STATISTICS を SAMPLE number PERCENT と共に使用する

次の例では、ContactMail1 統計グループ (コレクション) を作成します。ここでは、AdventureWorks データベースの Contact テーブルにある ContactID 列と EmailAddress 列の 5 パーセントを対象に、無作為抽出によって統計を計算します。

USE AdventureWorks;
GO
CREATE STATISTICS ContactMail1
    ON Person.Contact (ContactID, EmailAddress)
    WITH SAMPLE 5 PERCENT;

B. CREATE STATISTICS を FULLSCAN および NORECOMPUTE と共に使用する

次の例では、ContactMail2 統計グループ (コレクション) を作成します。ここでは、Contact テーブルの ContactID 列と EmailAddress 列のすべての列を対象に、統計を計算します。統計の自動再計算は無効にします。

CREATE STATISTICS NamePurchase
    ON AdventureWorks.Person.Contact (ContactID, EmailAddress)
    WITH FULLSCAN, NORECOMPUTE;

参照

関連項目

ALTER DATABASE (Transact-SQL)
CREATE INDEX (Transact-SQL)
DBCC SHOW_STATISTICS (Transact-SQL)
DROP STATISTICS (Transact-SQL)
sys.stats (Transact-SQL)
sys.stats_columns (Transact-SQL)
sp_autostats (Transact-SQL)
sp_createstats (Transact-SQL)
UPDATE STATISTICS (Transact-SQL)
EVENTDATA (Transact-SQL)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手