UPDATE STATISTICS (Transact-SQL)

Изменения: 12 декабря 2006 г.

Обновляет данные о распространении значений ключей для одной или нескольких групп статистики (коллекций) в указанной таблице или индексированном представлении. Сведения о создании статистики по столбцам см. в разделе CREATE STATISTICS (Transact-SQL).

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

UPDATE STATISTICS table | view 
    [ 
        { 
            { index | statistics_name }
          | ( { index |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 | view
    Имя таблицы или индексированного представления, для которых должна быть обновлена статистика. Имена таблиц или представлений должны соответствовать правилам для идентификаторов. Дополнительные сведения см. в разделе Использование идентификаторов в качестве имен объектов. Поскольку имена индексов не уникальны в пределах каждой базы данных, аргументы table или view должны быть указаны. Указывать схему базы данных, таблицы или представления необязательно.
  • index
    Индекс, для которого обновляется статистика. Имена индексов должны соответствовать правилам для идентификаторов. Если аргумент index не указан, обновляется статистика распределения для всех индексов в указанной таблице или индексированном представлении. Она включает статистику, созданную с помощью инструкции CREATE STATISTICS, автоматически созданную статистику, а также статистику, созданную, как побочный эффект при создании индекса.

    Чтобы отобразить отчет по индексам объекта, выполните процедуру sp_helpindex и укажите имя таблицы или представления.

  • statistics_name
    Имя группы статистики (коллекции), подлежащей обновлению. Имена статистических объектов должны соответствовать правилам для идентификаторов. Дополнительные сведения о создании групп статистики см. в разделе CREATE STATISTICS (Transact-SQL).
  • FULLSCAN
    Указывает, что все строки в аргументах table или view должны быть считаны, чтобы собрать статистические данные. FULLSCAN обеспечивает то же самое поведение, что и SAMPLE 100 PERCENT. FULLSCAN не может быть использован с параметром SAMPLE.
  • SAMPLE number { PERCENT | ROWS }
    Указывает долю таблицы или индексированного представления, или количество строк, подлежащих выборке при сборе статистических данных для крупных таблиц или представлений. Аргумент number должен быть целым числом, если указываются PERCENT или ROWS. Чтобы воспользоваться поведением выборки, по умолчанию, для крупных таблиц или представлений, используйте аргумент SAMPLE number с параметрами PERCENT или ROWS. Компонент SQL Server 2005 Database Engine гарантирует выборку минимального количества значений для обеспечения эффективной статистики. Если указанные значения параметров PERCENT, ROWS или аргумента number приводят к выборке недостаточного количества строк, компонент Database Engine автоматически корректирует выборку, основываясь на количестве существующих строк в таблице или представлении. Минимальный объем выборки составляет приблизительно 1000 страниц данных. Если значения параметров PERCENT, ROWS или аргумента number приводят к выборке большего числа значений, чем необходимо для эффективной статистики, компонент Database Engine старается ограничить выборку запрошенным количеством. Однако поскольку выборка осуществляется путем просмотра всех страниц данных, реальный объем выборки может не вполне точно соответствовать указанному объему. Если для PERCENT или ROWS указано значение 0, результатом является пустой набор статистики.

    ms187348.note(ru-ru,SQL.90).gifПримечание.
    Поведением, по умолчанию, является выполнение просмотра для создания выборки из целевой таблицы или индексированного представления. Компонент Database Engine автоматически вычисляет необходимый объем выборки.
  • RESAMPLE
    Указывает, что статистические данные будут собраны с использованием наследуемого коэффициента выборки для всех существующих статистик, включая индексы. Если с указанным коэффициентом выборки производится выборка недостаточного количества строк, компонент Database Engine автоматически корректирует выборку, основываясь на количестве существующих строк в таблице или представлении.
  • ALL | COLUMNS | INDEX
    Указывает, воздействует ли инструкция UPDATE STATISTICS на статистику столбца, статистику индекса или на все существующие статистики. Если параметр не определен, инструкция UPDATE STATISTICS воздействует на все статистики. Только один тип (ALL, COLUMNS или INDEX) может быть указан для каждой инструкции UPDATE STATISTICS.
  • NORECOMPUTE
    Указывает, что устаревшая статистика не подлежит автоматическому пересчету. Статистические данные устаревают в зависимости от количества операций INSERT, UPDATE и DELETE, выполненных в индексированных столбцах. Указание этого параметра приводит к отключению автоматического перестроения статистики компонентом Database Engine. Чтобы восстановить автоматический пересчет статистики, выполните заново инструкцию UPDATE STATISTICS без указания параметра NORECOMPUTE или выполните процедуру sp_autostats.

    ms187348.note(ru-ru,SQL.90).gifВажно!
    Отключение автоматического пересчета статистики может привести к тому, что оптимизатор запросов будет выбирать менее эффективную стратегию для запросов, относящихся к указанной таблице.
  • <update_stats_stream_option>
    Указано только в ознакомительных целях. Не поддерживается. Совместимость с будущими версиями не гарантируется.

Замечания

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

  • Если были произведены существенные изменения в ключевых значениях индекса, выполните заново инструкцию UPDATE STATISTICS по этому индексу.
  • Если большое количество данных в индексированном столбце было добавлено, изменено или удалено (то есть, если изменилось распространение ключевых значений), или если таблица была усечена при помощи инструкции TRUNCATE TABLE и затем заново заполнена, используйте инструкцию UPDATE STATISTICS.

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

Инструкция UPDATE STATISTICS WITH RESAMPLE обновляет всю статистику по таблице в соответствии с текущим показателем выборки. Это значит, что для обновления статистик, привязанных к индексам, созданных полным просмотром при построении индекса, требуется сканирование всей таблицы. Это может быть очень длительной операцией, особенно в случаях, когда в ней участвуют большие секционированные таблицы с множеством индексов. Обновление каждой статистики требует считывания больших объемов данных. Чтобы избежать этой проблемы, рассмотрите возможность использования процедуры sp_updatestats (Transact-SQL). Таким образом, статистики будут обновляться только по мере необходимости.

Статистики могут быть созданы или обновлены по таблицам с вычисляемыми столбцами только в случае, если существуют условия для создания индекса по этим столбцам. Дополнительные сведения о требованиях и ограничениях при создании индексов по вычисленным столбцам см. в разделе CREATE INDEX (Transact-SQL).

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

ms187348.note(ru-ru,SQL.90).gifПримечание.
Инструкция UPDATE STATISTICS заново включает автоматическое обновление статистики по целевой таблице или представлению, если не указано предложение NORECOMPUTE.

Разрешения

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

Примеры

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

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

USE AdventureWorks;
GO
UPDATE STATISTICS Sales.SalesOrderDetail;
GO

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

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

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

В. Обновление статистики для указанных групп статистики (коллекций) с использованием 50-процентной выборки

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

USE AdventureWorks;
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, а также отключается автоматическое обновление статистики для группы статистики (коллекции).

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

См. также

Справочник

ALTER DATABASE (Transact-SQL)
CREATE INDEX (Transact-SQL)
CREATE STATISTICS (Transact-SQL)
sys.stats (Transact-SQL)
sys.stats_columns (Transact-SQL)
Курсоры (Transact-SQL)
DBCC SHOW_STATISTICS (Transact-SQL)
DROP STATISTICS (Transact-SQL)
EXECUTE (Transact-SQL)
EVENTDATA (Transact-SQL)
Хранимая процедура sp_autostats (Transact-SQL)
sp_createstats (Transact-SQL)
Хранимая процедура sp_helpindex (Transact-SQL)
sp_updatestats (Transact-SQL)
STATS_DATE (Transact-SQL)

Другие ресурсы

Функции (компонент Database Engine)

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

12 декабря 2006 г.

Измененное содержимое
  • Из примечаний удалено предложение «Инструкция UPDATE STATISTICS не разрешается в явных или неявных транзакциях». Это ограничение не применяется в SQL Server 2005.