UPDATE STATISTICS (Transact-SQL)

Обновляет статистику оптимизации запросов для таблицы или индексированного представления. По умолчанию оптимизатор запросов обновляет статистику по мере необходимости для усовершенствования плана запроса. В некоторых случаях можно повысить производительность запроса, выполняя обновление статистики с помощью инструкции UPDATE STATISTICS или хранимой процедуры sp_updatestats чаще, чем это происходит по умолчанию.

Обновление статистики гарантирует, что запросы будут компилироваться с актуальной статистикой. Однако обновление статистики вызывает перекомпиляцию запросов. Рекомендуется не обновлять статистику слишком часто, поскольку необходимо найти баланс между выигрышем в производительности за счет усовершенствованных планов запросов и потерей времени на перекомпиляцию запросов. Критерии выбора компромиссного решения зависят от приложения. Операции UPDATE STATISTICS можно использовать в базе данных tempdb для сортировки образцов строк для построения статистики.

Дополнительные сведения о статистике, в том числе об условиях использования инструкции UPDATE STATISTICS, см. в разделе Использование статистики для повышения производительности запросов.

Значок ссылки на разделСоглашение о синтаксисе 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 
            | <update_stats_stream_option> [ ,...n ]
        ] 
        [ [ , ] [ ALL | COLUMNS | INDEX ] 
        [ [ , ] NORECOMPUTE ] 
    ] ;

<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, и статистика, созданная для индексов.

    Дополнительные сведения о параметре AUTO_CREATE_STATISTICS см. в разделе Параметры ALTER DATABASE SET (Transact-SQL). Просмотреть все индексы для таблицы или представления можно с помощью процедуры sp_helpindex.

  • FULLSCAN
    Вычисляет статистику путем просмотра всех строк в таблице или индексированном представлении. FULLSCAN и SAMPLE 100 PERCENT имеют одинаковые результаты. FULLSCAN не может быть использован с параметром SAMPLE.

  • SAMPLE number { PERCENT | ROWS }
    Указывает приблизительное процентное соотношение или число строк в таблице или индексированном представлении для оптимизатора запросов, которые используются при обновлении статистики. Аргумент number для параметра PERCENT может иметь значение от 0 до 100, а для параметра ROWS — от 0 до общего числа строк. Фактическое процентное соотношение или число строк, отбираемых оптимизатором запросов, может не совпадать с заданным значением. Например, оптимизатор запросов просматривает все строки на странице данных.

    Команда SAMPLE полезна в особых случаях, в которых план запроса на основе выборки по умолчанию не является оптимальным. В большинстве случаев нет необходимости использовать команду SAMPLE, так как оптимизатор запросов делает выборку и определяет размер статистически значимой выборки по умолчанию, что требуется для создания высококачественных планов запроса.

    Параметр SAMPLE нельзя использовать вместе с параметром FULLSCAN. Если не указана ни одна из команд SAMPLE или FULLSCAN, оптимизатор запросов использует выбранные данные и вычисляет размер выборки по умолчанию.

    Не рекомендуется указывать значения 0 PERCENT и 0 ROWS. Если для PERCENT или ROWS указано значение 0, объект статистики будет обновлен без статистических данных.

  • RESAMPLE
    Обновить каждый объект статистики, используя последнее значение частоты выборки.

    Использование RESAMPLE может вызвать просмотр полной таблицы. Например, статистика для индексов использует для частоты выборки просмотр полной таблицы. Если не указан ни один из параметров выборки (SAMPLE, FULLSCAN, RESAMPLE), оптимизатор запросов выполняет выборку данных и вычисляет размер выборки по умолчанию.

  • ALL | COLUMNS | INDEX
    Обновить всю существующую статистику, созданную по одному или нескольким столбцам, или статистику, созданную для индексов. Если не указан ни один параметр, инструкция UPDATE STATISTICS обновляет всю статистику для таблицы или индексированного представления.

  • NORECOMPUTE
    Отключить параметр автоматического обновления статистики AUTO_UPDATE_STATISTICS для указанной статистики. Если указан этот параметр, оптимизатор запросов завершает текущее обновление статистики и отключает обновление в будущем.

    Чтобы возобновить действие параметра AUTO_UPDATE_STATISTICS, снова выполните инструкцию UPDATE STATISTICS без параметра NORECOMPUTE или выполните процедуру sp_autostats.

    ПредупреждениеВнимание!

    Использование этого параметра может привести к созданию неоптимальных планов запросов. Рекомендуется ограничить использование этого параметра, причем использовать его надлежит только опытным системным администраторам.

    Дополнительные сведения о параметре AUTO_STATISTICS_UPDATE см. в разделе Параметры ALTER DATABASE SET (Transact-SQL). Дополнительные сведения об отключении и повторном включении обновления статистики см. в разделе Использование статистики для повышения производительности запросов.

  • <update_stats_stream_option>
    Указано только в ознакомительных целях. Не поддерживается. Совместимость с будущими версиями не гарантируется.

Замечания

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

Дополнительные сведения об условиях использования UPDATE STATISTICS см. в разделе Использование статистики для повышения производительности запросов.

Обновление всей статистики с помощью процедуры sp_updatestats

Сведения об обновлении статистики по всем определяемым пользователем таблицам и внутренним таблицам в базе данных см. в описании хранимой процедуры sp_updatestats (Transact-SQL). Например, следующая команда вызывает процедуру sp_updatestats для обновления всей статистики для базы данных.

EXEC sp_updatestats

Определение времени последнего обновления статистики

Чтобы определить время последнего обновления статистики, используйте функцию STATS_DATE.

Разрешения

Необходимо разрешение ALTER для таблицы или представления.

Примеры

А. Обновление всей статистики для таблицы

В следующем примере обновляется статистика для всех индексов в таблице SalesOrderDetail.

USE AdventureWorks2008R2;
GO
UPDATE STATISTICS Sales.SalesOrderDetail;
GO

Б. Обновление статистики для индекса

В следующем примере обновляется статистика для индекса AK_SalesOrderDetail_rowguid в таблице SalesOrderDetail.

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

В. Обновление статистики с применением 50-процентной выборки

В следующем примере создается, а затем обновляется статистика для столбцов Name и ProductNumber в таблице Product.

USE AdventureWorks2008R2;
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;

Г. Обновление статистики с использованием параметров FULLSCAN и NORECOMPUTE

В следующем примере обновляется статистика Products в таблице Product, принудительно запускается полный просмотр всех строк таблицы Product и отключается автоматическое обновление статистики Products.

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