UPDATE STATISTICS (Transact-SQL)

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

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

Применимо для следующих объектов: SQL Server (SQL Server 2008 по текущую версию), База данных SQL Windows Azure (С первоначального выпуска по текущий выпуск).

Значок ссылки на раздел Синтаксические обозначения в 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, и статистика, созданная для индексов.

    Дополнительные сведения о параметре 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 аргумент number может иметь значение от 0 до общего числа строк. Фактическое процентное соотношение или число строк, отбираемых оптимизатором запросов, может не совпадать с заданным значением. Например, оптимизатор запросов просматривает все строки на странице данных.

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

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

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

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

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

  • ON PARTITIONS ( { <partition_number> | <range> } [, …n] ) ]
    Задает принудительное повторное вычисление статистик конечного уровня, посвященных секциям в предложении ON PARTITIONS, с последующим их объединением для создания глобальных статистик. WITH RESAMPLE обязательно, потому что статистики секции, построенные с различной частотой выборки, нельзя объединить.

    Применимо для следующих объектов: С SQL Server 2014 по SQL Server 2014 включительно.

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

  • 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 для таблицы или представления.

Примеры

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

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

USE AdventureWorks2012;
GO
UPDATE STATISTICS Sales.SalesOrderDetail;
GO

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

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

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

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

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

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;

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

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

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

См. также

Справочник

ALTER DATABASE (Transact-SQL)

CREATE STATISTICS (Transact-SQL)

Инструкция DBCC SHOW_STATISTICS (Transact-SQL)

DROP STATISTICS (Transact-SQL)

Хранимая процедура sp_autostats (Transact-SQL)

sp_updatestats (Transact-SQL)

STATS_DATE (Transact-SQL)

Основные понятия

Статистика