エクスポート (0) 印刷
すべて展開
この記事は翻訳者によって翻訳されたものです。 記事の文章にポインターを重ねると、原文のテキストが表示されます。 詳細情報
訳文
原文

UPDATE STATISTICS (Transact-SQL)

テーブルまたはインデックス付きビューで、クエリ最適化に関する統計を更新します。 統計は既定で、クエリ プランを改善するためにクエリ オプティマイザーによって必要に応じて更新されますが、UPDATE STATISTICS またはストアド プロシージャ sp_updatestats を使用して既定の更新より頻繁に統計を更新することでクエリのパフォーマンスを向上させることができる場合もあります。

統計を更新すると、クエリが最新の統計を使用してコンパイルされるようになります。 ただし、統計の更新によりクエリが再コンパイルされます。 パフォーマンスの向上を目的とする場合、クエリ プランの改善とクエリの再コンパイルに要する時間の間にはトレードオフの関係があるため、あまり頻繁に統計を更新しないようにすることをお勧めします。 実際のトレードオフはアプリケーションによって異なります。 UPDATE STATISTICS では、統計情報を構築する際、行のサンプルを並べ替える目的で tempdb が使用されます。

適用対象: SQL Server (SQL Server 2008 から現在のバージョンまで)、Windows Azure SQL データベース (初回のリリースから現在のバージョンまで)

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

UPDATE STATISTICS table_or_indexed_view_name 
    [ 
        { 
            { index_or_statistics__name }
          | ( { index_or_statistics_name } [ ,...n ] ) 
                }
    ] 
    [    WITH 
        [ 
            FULLSCAN 
            | SAMPLE number { PERCENT | ROWS } 
            | RESAMPLE 
              [ ON PARTITIONS ( { <partition_number> | <range> } [, …n] ) ]
            | <update_stats_stream_option> [ ,...n ]
        ] 
        [ [ , ] [ ALL | COLUMNS | INDEX ] 
        [ [ , ] NORECOMPUTE ] 
        [ [ , ] INCREMENTAL = { ON | OFF } ]
    ] ;

<update_stats_stream_option> ::=
    [ STATS_STREAM = stats_stream ]
    [ ROWCOUNT = numeric_constant ]
    [ PAGECOUNT = numeric_contant ]

table_or_indexed_view_name

統計の更新対象のテーブルまたはインデックス付きビューの名前を指定します。

index_or_statistics_name

統計の更新対象のインデックスの名前、または更新する統計の名前を指定します。 index_or_statistics_name を指定しない場合は、クエリ オプティマイザーによってテーブルまたはインデックス付きビューのすべての統計が更新されます。 これには、CREATE STATISTICS ステートメントを使用して作成した統計、AUTO_CREATE_STATISTICS がオンの場合に作成される 1 列ずつの統計、およびインデックスに対して作成された統計が含まれます。

AUTO_CREATE_STATISTICS の詳細については、「ALTER DATABASE の SET オプション (Transact-SQL)」を参照してください。 テーブルまたはビューのすべてのインデックスを表示するには、sp_helpindex を使用します。

FULLSCAN

テーブルまたはインデックス付きビュー内のすべての行をスキャンして統計を計算します。 FULLSCAN と SAMPLE 100 PERCENT は同じ結果になります。 FULLSCAN では SAMPLE オプションは使用できません。

SAMPLE number { PERCENT | ROWS }

テーブルやインデックス付きビューに含まれている行について、クエリ オプティマイザーで統計を更新する際に使用するおおよその割合または数を指定します。 PERCENT の場合、number には 0 ~ 100 を指定します。ROWS の場合、number には 0 ~合計行数を指定します。 クエリ オプティマイザーによってサンプリングされる行の実際の割合や行数が、指定した割合や行数と一致しない場合もあります。 たとえば、データ ページではすべての行がスキャンされます。

SAMPLE は、既定のサンプリングに基づくクエリ プランが最適ではない特殊な場合に使用できます。 既定ではクエリ オプティマイザーはサンプリングを使用して統計的に有意なサンプル サイズを決定するため、SAMPLE を指定する必要はほとんどありませんが、高品質のクエリ プランを作成する場合は、SAMPLE が必要になります。

SAMPLE では FULLSCAN オプションは使用できません。 SAMPLE も FULLSCAN も指定しない場合、既定ではクエリ オプティマイザーはサンプリングしたデータを使用してサンプル サイズを計算します。

0 PERCENT や 0 ROWS を指定することはお勧めしません。 0 PERCENT または 0 ROWS を指定した場合、統計オブジェクトは更新されますが、統計データは含まれません。

RESAMPLE

最新のサンプル レートを使用して各統計を更新します。

RESAMPLE を使用すると、フル テーブル スキャンが実行される場合があります。 たとえば、インデックスの統計では、サンプル レートを取得するためにフル テーブル スキャンが使用されます。 サンプル オプション (SAMPLE、FULLSCAN、RESAMPLE) がいずれも指定されていなければ、既定ではクエリ オプティマイザーはデータをサンプリングしてサンプル サイズを計算します。

ON PARTITIONS ( { <partition_number> | <range> } [, …n] ) ]

ON PARTITIONS 句で指定したパーティションを対象としたリーフ レベルの統計を強制的に再計算してから、それらをマージして全体統計を構築します。 異なるサンプル レートで構築されたパーティションの統計はマージできないため、WITH RESAMPLE が必要になります。

適用対象: SQL Server 2014 から SQL Server 2014。

ALL | COLUMNS | INDEX

すべての既存の統計、1 つ以上の列で作成された統計、またはインデックスに対して作成された統計を更新します。 何も指定しない場合は、テーブルまたはインデックス付きビューのすべての統計が更新されます。

NORECOMPUTE

指定した統計の自動統計更新オプション (AUTO_UPDATE_STATISTICS) を無効にします。 このオプションを指定すると、現在の更新は実行され、その後の更新が無効になります。

AUTO_UPDATE_STATISTICS オプションの動作を再有効化するには、NORECOMPUTE オプションを指定せずに UPDATE STATISTICS を再実行するか、または sp_autostats を実行します。

注記 注意

このオプションを使用すると、最適ではないクエリ プランが作成されることがあります。 このオプションは慎重に使用してください。特に、資格のあるシステム管理者だけが使用することをお勧めします。

AUTO_STATISTICS_UPDATE オプションの詳細については、「ALTER DATABASE の SET オプション (Transact-SQL)」を参照してください。

INCREMENTAL = { ON | OFF }

ON の場合、パーティションごとの統計のように統計が再作成されます。 OFF の場合、統計ツリーが削除され、SQL Server によって統計が再計算されます。 既定値は OFF です。

パーティションごとの統計がサポートされていない場合は、エラーが生成されます。 次の種類の統計では、増分統計がサポートされていません。

  • ベース テーブルにパーティションで固定されていないインデックスを使用して作成された統計。

  • AlwaysOn の読み取り可能なセカンダリ データベースに対して作成された統計。

  • 読み取り専用のデータベースに対して作成された統計。

  • フィルター選択されたインデックスに対して作成された統計。

  • ビューに対して作成された統計。

  • 内部テーブルに対して作成された統計。

  • 空間インデックスまたは XML インデックスを使用して作成された統計。

適用対象: SQL Server 2014 から SQL Server 2014。

<update_stats_stream_option>

単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

UPDATE STATISTICS を使用する場合

UPDATE STATISTICS を使用する場合の詳細については、「統計」を参照してください。

sp_updatestats によるすべての統計の更新

データベース内にあるすべてのユーザー定義テーブルと内部テーブルの統計を更新する方法については、ストアド プロシージャ sp_updatestats (Transact-SQL) の説明を参照してください。 たとえば次のコマンドは、sp_updatestats を呼び出してデータベースのすべての統計を更新します。

EXEC sp_updatestats;

統計の最終更新日の特定

統計の最終更新日を調べるには、STATS_DATE 関数を使用します。

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

A. テーブルのすべての統計を更新する

次の例では、SalesOrderDetail テーブルのすべてのインデックスの統計を更新します。

USE AdventureWorks2012;
GO
UPDATE STATISTICS Sales.SalesOrderDetail;
GO

B. 1 つのインデックスの統計を更新する

次の例では、SalesOrderDetail テーブルの AK_SalesOrderDetail_rowguid インデックスの統計を更新します。

USE AdventureWorks2012;
GO
UPDATE STATISTICS Sales.SalesOrderDetail AK_SalesOrderDetail_rowguid;
GO

C. 50% サンプリングで統計を更新する

次の例では、Product テーブルの Name および ProductNumber 列に統計を作成し、更新します。

USE AdventureWorks2012;
GO
CREATE STATISTICS Products
    ON Production.Product ([Name], ProductNumber)
    WITH SAMPLE 50 PERCENT
-- Time passes. The UPDATE STATISTICS statement is then executed.
UPDATE STATISTICS Production.Product(Products) 
    WITH SAMPLE 50 PERCENT;

D. FULLSCAN および NORECOMPUTE を使用して統計を更新する

次の例では、Product テーブル内の Products 統計を更新し、Product テーブル内のすべての行でフル スキャンを強制的に実行し、Products 統計の自動統計更新を無効にします。

USE AdventureWorks2012;
GO
UPDATE STATISTICS Production.Product(Products)
    WITH FULLSCAN, NORECOMPUTE;
GO
この情報は役に立ちましたか。
(残り 1500 文字)
フィードバックをいただき、ありがとうございました

コミュニティの追加

追加
表示:
© 2014 Microsoft