UPDATE STATISTICS (Transact-SQL)UPDATE STATISTICS (Transact-SQL)

適用対象: ○SQL Server (2008 以降)○Azure SQL Database○Azure SQL Data Warehouse ○Parallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

テーブルまたはインデックス付きビューで、クエリ最適化に関する統計を更新します。Updates query optimization statistics on a table or indexed view. 既定では、クエリ オプティマイザー既に統計を更新、クエリ プランを向上させるために必要に応じて場合によっては、UPDATE STATISTICS またはストアド プロシージャを使用してクエリのパフォーマンスを向上できますsp_updatestatsを既定の更新より頻繁に統計を更新します。By default, the query optimizer already updates statistics as necessary to improve the query plan; in some cases you can improve query performance by using UPDATE STATISTICS or the stored procedure sp_updatestats to update statistics more frequently than the default updates.

統計を更新すると、クエリが最新の統計を使用してコンパイルされるようになります。Updating statistics ensures that queries compile with up-to-date statistics. ただし、統計の更新によりクエリが再コンパイルされます。However, updating statistics causes queries to recompile. パフォーマンスの向上を目的とする場合、クエリ プランの改善とクエリの再コンパイルに要する時間の間にはトレードオフの関係があるため、あまり頻繁に統計を更新しないようにすることをお勧めします。We recommend not updating statistics too frequently because there is a performance tradeoff between improving query plans and the time it takes to recompile queries. 実際のトレードオフはアプリケーションによって異なります。The specific tradeoffs depend on your application. 統計の更新では、tempdb を使用して、統計を作成するための行のサンプルを並べ替えます。UPDATE STATISTICS can use tempdb to sort the sample of rows for building statistics.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

-- Syntax for SQL Server and Azure SQL Database  

UPDATE STATISTICS table_or_indexed_view_name   
    [   
        {   
            { index_or_statistics__name }  
          | ( { index_or_statistics_name } [ ,...n ] )   
                }  
    ]   
    [    WITH   
        [  
            FULLSCAN   
              [ [ , ] PERSIST_SAMPLE_PERCENT = { ON | OFF } ]    
            | SAMPLE number { PERCENT | ROWS }   
              [ [ , ] PERSIST_SAMPLE_PERCENT = { ON | OFF } ]    
            | 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 ]  
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  

UPDATE STATISTICS schema_name . ] table_name   
    [ ( { statistics_name | index_name } ) ]  
    [ WITH   
       {  
              FULLSCAN   
            | SAMPLE number PERCENT   
            | RESAMPLE   
        }  
    ]  
[;]  

引数Arguments

table_or_indexed_view_nametable_or_indexed_view_name
テーブルまたはインデックス付きビューを含む、統計オブジェクトの名前です。Is the name of the table or indexed view that contains the statistics object.

index_or_statistics_nameindex_or_statistics_name
統計の更新対象のインデックスの名前、または更新する統計の名前を指定します。Is the name of the index to update statistics on or name of the statistics to update. 場合index_or_statistics_nameが指定されていない、クエリ オプティマイザーがテーブルまたはインデックス付きビューのすべての統計を更新します。If index_or_statistics_name is not specified, the query optimizer updates all statistics for the table or indexed view. これには、CREATE STATISTICS ステートメントを使用して作成した統計、AUTO_CREATE_STATISTICS がオンの場合に作成される 1 列ずつの統計、およびインデックスに対して作成された統計が含まれます。This includes statistics created using the CREATE STATISTICS statement, single-column statistics created when AUTO_CREATE_STATISTICS is on, and statistics created for indexes.

AUTO_CREATE_STATISTICS の詳細については、次を参照してください。 ALTER DATABASE SET Options & #40 です。TRANSACT-SQL と #41 です。.For more information about AUTO_CREATE_STATISTICS, see ALTER DATABASE SET Options (Transact-SQL). 使用してテーブルまたはビューのすべてのインデックスを表示するには、 sp_helpindexです。To view all indexes for a table or view, you can use sp_helpindex.

FULLSCANFULLSCAN
テーブルまたはインデックス付きビュー内のすべての行をスキャンして統計を計算します。Compute statistics by scanning all rows in the table or indexed view. FULLSCAN と SAMPLE 100 PERCENT は同じ結果になります。FULLSCAN and SAMPLE 100 PERCENT have the same results. FULLSCAN では SAMPLE オプションは使用できません。FULLSCAN cannot be used with the SAMPLE option.

サンプル{%|行}SAMPLE number { PERCENT | ROWS }
テーブルやインデックス付きビューに含まれている行について、クエリ オプティマイザーで統計を更新する際に使用するおおよその割合または数を指定します。Specifies the approximate percentage or number of rows in the table or indexed view for the query optimizer to use when it updates statistics. %、は、0 100 からと、行から行の合計数を 0 から指定できます。For PERCENT, number can be from 0 through 100 and for ROWS, number can be from 0 to the total number of rows. クエリ オプティマイザーによってサンプリングされる行の実際の割合や行数が、指定した割合や行数と一致しない場合もあります。The actual percentage or number of rows the query optimizer samples might not match the percentage or number specified. たとえば、データ ページではすべての行がスキャンされます。For example, the query optimizer scans all rows on a data page.

サンプルは、これで、既定のサンプリングに基づくクエリ プランが最適でない特殊な場合に便利です。SAMPLE is useful for special cases in which the query plan, based on default sampling, is not optimal. 既定ではクエリ オプティマイザーはサンプリングを使用して統計的に有意なサンプル サイズを決定するため、SAMPLE を指定する必要はほとんどありませんが、高品質のクエリ プランを作成する場合は、SAMPLE が必要になります。In most situations, it is not necessary to specify SAMPLE because the query optimizer uses sampling and determines the statistically significant sample size by default, as required to create high-quality query plans.

以降で SQL Server 2016SQL Server 2016、互換性レベルが 130 を使用して、統計コレクションのパフォーマンスを向上する場合は、統計を作成するデータのサンプリングを並列で実行します。Starting with SQL Server 2016SQL Server 2016, sampling of data to build statistics is done in parallel, when using compatibility level 130, to improve the performance of statistics collection. テーブルのサイズが一定のしきい値を超えたときに、クエリ オプティマイザーは parallel のサンプルの統計情報を使用します。The query optimizer will use parallel sample statistics, whenever a table size exceeds a certain threshold.

SAMPLE では FULLSCAN オプションは使用できません。SAMPLE cannot be used with the FULLSCAN option. SAMPLE も FULLSCAN も指定しない場合、既定ではクエリ オプティマイザーはサンプリングしたデータを使用してサンプル サイズを計算します。When neither SAMPLE nor FULLSCAN is specified, the query optimizer uses sampled data and computes the sample size by default.

0 PERCENT や 0 ROWS を指定することはお勧めしません。We recommend against specifying 0 PERCENT or 0 ROWS. 0 PERCENT または 0 ROWS を指定した場合、統計オブジェクトは更新されますが、統計データは含まれません。When 0 PERCENT or ROWS is specified, the statistics object is updated but does not contain statistics data.

ほとんどのワークロードのフル スキャンが必要でないと既定のサンプリングが適切です。For most workloads, a full scan is not required, and default sampling is adequate.
ただしは多様なデータ分布に影響する特定のワークロードは、増加したサンプル サイズ、または完全なスキャンでも必要があります。However, certain workloads that are sensitive to widely varying data distributions may require an increased sample size, or even a full scan.
詳細については、次を参照してください。、 CSS SQL エスカレーション Services ブログです。For more information, see the CSS SQL Escalation Services blog.

RESAMPLERESAMPLE
最新のサンプル レートを使用して各統計を更新します。Update each statistic using its most recent sample rate.

RESAMPLE を使用すると、フル テーブル スキャンが実行される場合があります。Using RESAMPLE can result in a full-table scan. たとえば、インデックスの統計では、サンプル レートを取得するためにフル テーブル スキャンが使用されます。For example, statistics for indexes use a full-table scan for their sample rate. サンプル オプション (SAMPLE、FULLSCAN、RESAMPLE) がいずれも指定されていなければ、既定ではクエリ オプティマイザーはデータをサンプリングしてサンプル サイズを計算します。When none of the sample options (SAMPLE, FULLSCAN, RESAMPLE) are specified, the query optimizer samples the data and computes the sample size by default.

PERSIST_SAMPLE_PERCENT = {ON |オフ}PERSIST_SAMPLE_PERCENT = { ON | OFF }
ときにON統計のサンプリング比率が明示的に指定されていない後続の更新プログラム セット サンプリングの割合が保持されます。When ON, the statistics will retain the set sampling percentage for subsequent updates that do not explicitly specify a sampling percentage. ときにOFF、統計サンプリング率はサンプリング比率が明示的に指定されていない後続の更新で既定のサンプリングをリセットします。When OFF, statistics sampling percentage will get reset to default sampling in subsequent updates that do not explicitly specify a sampling percentage. 既定値はOFFです。The default is OFF.

注意

AUTO_UPDATE_STATISTICS が実行された場合は、使用可能な場合は、永続化されたサンプリング率を使用してまたは以外の場合は、既定のサンプリング比率を使用します。If AUTO_UPDATE_STATISTICS is executed, it uses the persisted sampling percentage if available, or use default sampling percentage if not. RESAMPLE は、このオプションの動作は影響しません。RESAMPLE behavior is not affected by this option.

ヒント

DBCC SHOW_STATISTICSsys.dm_db_stats_properties選択された統計情報の永続化されたサンプルの割合の値を公開します。DBCC SHOW_STATISTICS and sys.dm_db_stats_properties expose the persisted sample percent value for the selected statistic.

適用されます: SQL Server 2016SQL Server 2016 SP1 CU4 です。Applies to: SQL Server 2016SQL Server 2016 SP1 CU4.

パーティションで ({ <partition_number > |<範囲 >}[、... n])を再計算、および全体の統計を作成するマージし、ON PARTITIONS 句で指定されたパーティションをカバーするリーフ レベルの統計を強制します。ON PARTITIONS ( { <partition_number> | <range> } [, …n] ) ] Forces the leaf-level statistics covering the partitions specified in the ON PARTITIONS clause to be recomputed, and then merged to build the global statistics. 異なるサンプル レートで構築されたパーティションの統計はマージできないため、WITH RESAMPLE が必要になります。WITH RESAMPLE is required because partition statistics built with different sample rates cannot be merged together.

適用されます: SQL Server 2014SQL Server 2014経由 SQL Server 2017SQL Server 2017Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017

ALL | COLUMNS | INDEXALL | COLUMNS | INDEX
すべての既存の統計、1 つ以上の列で作成された統計、またはインデックスに対して作成された統計を更新します。Update all existing statistics, statistics created on one or more columns, or statistics created for indexes. 何も指定しない場合は、テーブルまたはインデックス付きビューのすべての統計が更新されます。If none of the options are specified, the UPDATE STATISTICS statement updates all statistics on the table or indexed view.

NORECOMPUTENORECOMPUTE
指定した統計の自動統計更新オプション (AUTO_UPDATE_STATISTICS) を無効にします。Disable the automatic statistics update option, AUTO_UPDATE_STATISTICS, for the specified statistics. このオプションを指定すると、現在の更新は実行され、その後の更新が無効になります。If this option is specified, the query optimizer completes this statistics update and disables future updates.

AUTO_UPDATE_STATISTICS オプションの動作を再度有効にする、NORECOMPUTE オプションを指定せずに UPDATE STATISTICS を再実行、または実行sp_autostatsです。To re-enable the AUTO_UPDATE_STATISTICS option behavior, run UPDATE STATISTICS again without the NORECOMPUTE option or run sp_autostats.

警告

このオプションを使用すると、最適ではないクエリ プランが作成されることがあります。Using this option can produce suboptimal query plans. このオプションは慎重に使用してください。特に、資格のあるシステム管理者だけが使用することをお勧めします。We recommend using this option sparingly, and then only by a qualified system administrator.

AUTO_STATISTICS_UPDATE オプションの詳細については、次を参照してください。 ALTER DATABASE SET Options & #40 です。TRANSACT-SQL と #41 です。.For more information about the AUTO_STATISTICS_UPDATE option, see ALTER DATABASE SET Options (Transact-SQL).

INCREMENTAL = { ON | OFF }INCREMENTAL = { ON | OFF }
ときにONパーティションの統計情報に従って、統計を再作成します。When ON, the statistics are recreated as per partition statistics. ときにOFF、統計ツリーが削除されると SQL ServerSQL Server統計が再計算します。When OFF, the statistics tree is dropped and SQL ServerSQL Server re-computes the statistics. 既定値はOFFです。The default is OFF.

パーティションごとの統計がサポートされていない場合は、エラーが生成されます。If per partition statistics are not supported an error is generated. 次の種類の統計では、増分統計がサポートされていません。Incremental stats are not supported for following statistics types:

  • ベース テーブルにパーティションで固定されていないインデックスを使用して作成された統計。Statistics created with indexes that are not partition-aligned with the base table.

  • Always On の読み取り可能なセカンダリ データベースに対して作成された統計。Statistics created on Always On readable secondary databases.

  • 読み取り専用のデータベースに対して作成された統計。Statistics created on read-only databases.

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

  • ビューに対して作成された統計。Statistics created on views.

  • 内部テーブルに対して作成された統計。Statistics created on internal tables.

  • 空間インデックスまたは XML インデックスを使用して作成された統計。Statistics created with spatial indexes or XML indexes.

適用されます: SQL Server 2014SQL Server 2014経由 SQL Server 2017SQL Server 2017Applies to: SQL Server 2014SQL Server 2014 through SQL Server 2017SQL Server 2017

<update_stats_stream_option > 単に情報を示すためだけに特定されます。Identified for informational purposes only. サポートされていません。Not supported. 将来の互換性は保証されません。Future compatibility is not guaranteed.<update_stats_stream_option> 単に情報を示すためだけに特定されます。Identified for informational purposes only. サポートされていません。Not supported. 将来の互換性は保証されません。Future compatibility is not guaranteed.

解説Remarks

UPDATE STATISTICS を使用する場合When to Use UPDATE STATISTICS

詳細について UPDATE STATISTICS を使用する場合は、次を参照してください。統計です。For more information about when to use UPDATE STATISTICS, see Statistics.

sp_updatestats によるすべての統計の更新Updating All Statistics with sp_updatestats

データベース内のすべてのユーザー定義および内部テーブルの統計を更新する方法については、ストアド プロシージャ sp_updatestats (Transact-SQL) の説明を参照してください。For information about how to update statistics for all user-defined and internal tables in the database, see the stored procedure sp_updatestats (Transact-SQL). たとえば次のコマンドは、sp_updatestats を呼び出してデータベースのすべての統計を更新します。For example, the following command calls sp_updatestats to update all statistics for the database.

EXEC sp_updatestats;  

統計の最終更新日の特定Determining the Last Statistics Update

統計の最終更新日を調べるには、 STATS_DATE 関数を使用します。To determine when statistics were last updated, use the STATS_DATE function.

PDW SQL データ ウェアハウス/PDW / SQL Data Warehouse

PDW では、次の構文はサポートされていない SQL データ ウェアハウス/The following syntax is not supported by PDW / SQL Data Warehouse

update statistics t1 (a,b);   
update statistics t1 (a) with sample 10 rows;  
update statistics t1 (a) with NORECOMPUTE;  
update statistics t1 (a) with INCREMENTAL=ON;  
update statistics t1 (a) with stats_stream = 0x01;  

PermissionsPermissions

テーブルまたはビューに対する ALTER 権限が必要です。Requires ALTER permission on the table or view.

使用例Examples

A.A. テーブルのすべての統計を更新するUpdate all statistics on a table

次の例は、上のすべてのインデックスの統計を更新、SalesOrderDetailテーブル。The following example updates the statistics for all indexes on the SalesOrderDetail table.

USE AdventureWorks2012;  
GO  
UPDATE STATISTICS Sales.SalesOrderDetail;  
GO  

B.B. 1 つのインデックスの統計を更新するUpdate the statistics for an index

次の例の統計を更新する、AK_SalesOrderDetail_rowguidのインデックス、SalesOrderDetailテーブル。The following example updates the statistics for the AK_SalesOrderDetail_rowguid index of the SalesOrderDetail table.

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

C.C. 50% サンプリングで統計を更新するUpdate statistics by using 50 percent sampling

次の例を作成しの統計を更新し、NameProductNumber内の列、Productテーブル。The following example creates and then updates the statistics for the Name and ProductNumber columns in the Product table.

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.D. FULLSCAN および NORECOMPUTE を使用して統計を更新するUpdate statistics by using FULLSCAN and NORECOMPUTE

次の例の更新プログラム、Products内の統計、Productテーブルで、すべての行でフル スキャンの強制、Productテーブル、および自動の統計をオフに、Products統計。The following example updates the Products statistics in the Product table, forces a full scan of all rows in the Product table, and turns off automatic statistics for the Products statistics.

USE AdventureWorks2012;  
GO  
UPDATE STATISTICS Production.Product(Products)  
    WITH FULLSCAN, NORECOMPUTE;  
GO  

例: Azure SQL データ ウェアハウスAzure SQL Data WarehouseParallel Data WarehouseParallel Data WarehouseExamples: Azure SQL データ ウェアハウスAzure SQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

E.E. テーブルで統計を更新します。Update statistics on a table

次の例の更新プログラム、CustomerStats1に関する統計情報、Customerテーブル。The following example updates the CustomerStats1 statistics on the Customer table.

UPDATE STATISTICS Customer ( CustomerStats1 );  

F.F. フル スキャンを使用して、統計の更新Update statistics by using a full scan

次の例の更新プログラム、CustomerStats1内の行をすべてスキャンに基づいて、統計、Customerテーブル。The following example updates the CustomerStats1 statistics, based on scanning all of the rows in the Customer table.

UPDATE STATISTICS Customer (CustomerStats1) WITH FULLSCAN;  

G.G. テーブルのすべての統計を更新するUpdate all statistics on a table

次の例は、すべての統計を更新、Customerテーブル。The following example updates all statistics on the Customer table.

UPDATE STATISTICS Customer;  

参照See Also

統計情報 Statistics
ALTER DATABASE (Transact-SQL) ALTER DATABASE (Transact-SQL)
CREATE STATISTICS (Transact-SQL) CREATE STATISTICS (Transact-SQL)
DBCC SHOW_STATISTICS (Transact-SQL) DBCC SHOW_STATISTICS (Transact-SQL)
DROP STATISTICS (Transact-SQL) DROP STATISTICS (Transact-SQL)
sp_autostats & #40 です。TRANSACT-SQL と #41 です。 sp_autostats (Transact-SQL)
sp_updatestats (Transact-SQL) sp_updatestats (Transact-SQL)
STATS_DATE & #40 です。TRANSACT-SQL と #41 です。STATS_DATE (Transact-SQL)
sys.dm_db_stats_properties & #40 です。TRANSACT-SQL と #41 です。sys.dm_db_stats_properties (Transact-SQL)