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

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server даБаза данных SQL Azure даAzure Synapse Analytics (хранилище данных SQL) даParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) 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. UPDATE STATISTICS может использовать базу данных tempdb для сортировки образцов строк для построения статистики.UPDATE STATISTICS can use tempdb to sort the sample of rows for building statistics.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic 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 } ] 
        [ [ , ] MAXDOP = max_degree_of_parallelism ] 
    ] ;  
  
<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, и статистика, созданная для индексов.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 (Transact-SQL).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 }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. Аргумент number для параметра PERCENT может иметь значение от 0 до 100, а для параметра ROWS аргумент number может иметь значение от 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 полезна в особых случаях, в которых план запроса на основе выборки по умолчанию не является оптимальным.SAMPLE is useful for special cases in which the query plan, based on default sampling, is not optimal. В большинстве случаев нет необходимости использовать команду 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 2016 (13.x)SQL Server 2016 (13.x), выборка данных для формирования статистики выполняется в параллельном режиме при использовании уровня совместимости 130, что повышает производительность сбора статистики.Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x), sampling of data to build statistics is done in parallel, when using compatibility level 130, to improve the performance of statistics collection. Оптимизатор запросов будет использовать статистику параллельной выборки каждый раз, когда размер таблицы превышает определенный порог.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. Если для PERCENT или ROWS указано значение 0, объект статистики будет обновлен без статистических данных.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.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 | OFF }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.

Примечание

Если таблица усечена, вся статистика, построенная на усеченном HoBT, вернется к использованию процентного соотношения выборки по умолчанию.If the table is truncated, all statistics built on the truncated HoBT will revert to using the default sampling percentage.

Совет

Значение сохраненного процента выборки для выбранной статистики отображается в DBCC SHOW_STATISTICS и sys.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 2016 (13.x)SQL Server 2016 (13.x) (начиная с SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1 CU4) и выше (начиная с SQL Server 2017 (14.x)SQL Server 2017 (14.x)CU1).Applies to: SQL Server 2016 (13.x)SQL Server 2016 (13.x) (starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1 CU4) and later (starting with SQL Server 2017 (14.x)SQL Server 2017 (14.x) CU1).

ON PARTITIONS ( { <partition_number> | <range> } [, ...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 2014 (12.x)SQL Server 2014 (12.x) и более поздних версийApplies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) and later

ALL | COLUMNS | INDEXALL | COLUMNS | INDEX
Обновить всю существующую статистику, созданную по одному или нескольким столбцам, или статистику, созданную для индексов.Update all existing statistics, statistics created on one or more columns, or statistics created for indexes. Если не указан ни один параметр, инструкция UPDATE STATISTICS обновляет всю статистику для таблицы или индексированного представления.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, снова выполните инструкцию UPDATE STATISTICS без параметра NORECOMPUTE или выполните процедуру 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 (Transact-SQL).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.
  • Статистики, созданные в доступных для чтения базах данных-получателях AlwaysOn.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 2014 (12.x)SQL Server 2014 (12.x) и более поздних версийApplies to: SQL Server 2014 (12.x)SQL Server 2014 (12.x) and later

MAXDOP = max_degree_of_parallelismMAXDOP = max_degree_of_parallelism
Область применения: SQL ServerSQL Server (начиная с SQL Server 2016 (13.x)SQL Server 2016 (13.x) с пакетом обновления 2 (SP2) и SQL Server 2017 (14.x)SQL Server 2017 (14.x) с накопительным пакетом обновления 3 (CU3)).Applies to: SQL ServerSQL Server (Starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP2 and SQL Server 2017 (14.x)SQL Server 2017 (14.x) CU3).

Переопределяет параметр конфигурации max degree of parallelism на время выполнения операции со статистикой.Overrides the max degree of parallelism configuration option for the duration of the statistic operation. Дополнительные сведения см. в разделе Настройка параметра конфигурации сервера max degree of parallelism.For more information, see Configure the max degree of parallelism Server Configuration Option. MAXDOP можно использовать для ограничения числа процессоров, используемых при параллельном выполнении планов.Use MAXDOP to limit the number of processors used in a parallel plan execution. Максимальное число процессоров — 64.The maximum is 64 processors.

Параметр max_degree_of_parallelism может иметь одно из следующих значений:max_degree_of_parallelism can be:

11
Подавляет формирование параллельных планов.Suppresses parallel plan generation.

>1>1
Ограничивает максимальное количество процессоров, используемых в параллельных операциях со статистиками, заданным или меньшим числом в зависимости от текущей рабочей нагрузки системы.Restricts the maximum number of processors used in a parallel statistic operation to the specified number or fewer based on the current system workload.

0 (по умолчанию)0 (default)
В зависимости от текущей рабочей нагрузки системы использует реальное или меньшее число процессоров.Uses the actual number of processors or fewer based on the current system workload.

<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.

RemarksRemarks

Условия использования инструкции UPDATE STATISTICSWhen to Use UPDATE STATISTICS

Дополнительные сведения об условиях использования UPDATE STATISTICS см. в разделе Статистика.For more information about when to use UPDATE STATISTICS, see Statistics.

ОграниченияLimitations and Restrictions

  • Обновление статистики во внешних таблицах не поддерживается.Updating statistics is not supported on external tables. Для обновления статистики во внешней таблице удалите и повторно создайте статистику.To update statistics on an external table, drop and re-create the statistics.
  • Параметр MAXDOP несовместим с параметрами STATS_STREAM, ROWCOUNT и PAGECOUNT.The MAXDOP option is not compatible with STATS_STREAM, ROWCOUNT and PAGECOUNT options.
  • Параметр MAXDOP ограничивается параметром MAX_DOP группы рабочей нагрузки Resource Governor (если применимо).The MAXDOP option is limited by the Resource Governor workload group MAX_DOP setting, if used.

Обновление всей статистики с помощью процедуры sp_updatestatsUpdating 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;  

Автоматическое управление индексами и статистикойAutomatic index and statistics management

Используйте такие решения, как Адаптивная дефрагментация индексов, чтобы автоматически управлять дефрагментацией индексов и обновлениями статистики для одной базы данных или нескольких.Leverage solutions such as Adaptive Index Defrag to automatically manage index defragmentation and statistics updates for one or more databases. Эта процедура автоматически выбирает, следует ли перестроить или реорганизовать индекс, сверяясь с уровнем фрагментации и другими параметрами, и обновляет статистику на основе линейных пороговых значений.This procedure automatically chooses whether to rebuild or reorganize an index according to its fragmentation level, amongst other parameters, and update statistics with a linear threshold.

Определение времени последнего обновления статистикиDetermining the Last Statistics Update

Чтобы определить время последнего обновления статистики, используйте функцию STATS_DATE .To determine when statistics were last updated, use the STATS_DATE function.

PDW / Хранилище данных SQLPDW / SQL Data Warehouse

Следующий синтаксис не поддерживается в PDW или хранилище данных SQLThe 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;  

РазрешенияPermissions

Необходимо разрешение 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. Обновление статистики для индекса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. Обновление статистики с применением 50-процентной выборкиUpdate statistics by using 50 percent sampling

В следующем примере создается, а затем обновляется статистика для столбцов Name и ProductNumber в таблице 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. Обновление статистики с использованием параметров FULLSCAN и NORECOMPUTEUpdate 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 Synapse Analytics (хранилище данных SQL)Azure Synapse Analytics (SQL DW) и Параллельное хранилище данныхParallel Data WarehouseExamples: Azure Synapse Analytics (хранилище данных SQL)Azure Synapse Analytics (SQL DW) and Параллельное хранилище данныхParallel Data Warehouse

Д.E. Обновление статистики для таблицыUpdate statistics on a table

В следующем примере обновляется статистика CustomerStats1 в таблице Customer.The following example updates the CustomerStats1 statistics on the Customer table.

UPDATE STATISTICS Customer ( CustomerStats1 );  

Е.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. Обновление всей статистики для таблицы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 (Transact-SQL) sp_autostats (Transact-SQL)
sp_updatestats (Transact-SQL) sp_updatestats (Transact-SQL)
STATS_DATE (Transact-SQL)STATS_DATE (Transact-SQL)
sys.dm_db_stats_properties (Transact-SQL) sys.dm_db_stats_properties (Transact-SQL)
sys.dm_db_stats_histogram (Transact-SQL)sys.dm_db_stats_histogram (Transact-SQL)