CREATE STATISTICS (Transact-SQL)

Создает гистограмму и соответствующие группы плотности (коллекции) для указанного столбца или набора столбцов таблицы, или индексированного представления. Кроме того, для статистики, составленной на основе столбцов char, varchar, varchar(max), nchar, nvarchar, nvarchar(max), text и ntext, создается сводная строчная статистика. Оптимизатор запросов использует эти статистические данные для выбора наиболее эффективного плана извлечения или обновления данных. Обновляемая статистика позволяет оптимизатору точно оценить стоимость разных планов запросов и выбрать высококачественный план. Дополнительные сведения о статистиках в SQL Server 2005 см. в разделе Статистики, используемые оптимизатором запросов Microsoft SQL Server 2005 в Microsoft TechNet.

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

Синтаксис

CREATE STATISTICS statistics_name 
ON { table | view } ( column [ ,...n ] ) 
    [ WITH 
        [ [ FULLSCAN 
          | SAMPLE number { PERCENT | ROWS } 
          | STATS_STREAM = stats_stream ] [ , ] ] 
        [ NORECOMPUTE ] 
    ] ;

Аргументы

  • statistics_name
    Имя создаваемой статистической группы. Имена статистических групп должны соответствовать требованиям, предъявляемым к идентификаторам, и должны быть уникальными в таблице или представлении, для которых они создаются.
  • table
    Имя таблицы, на основе которой создается именованная статистическая группа. Имена таблиц должны соответствовать требованиям, предъявляемым к идентификаторам. Аргумент table определяет таблицу, с которой связан аргумент column. Указывать имя владельца таблицы необязательно. Статистику можно создавать на основе таблиц другой базы данных — для этого нужно указать полное имя таблицы.
  • view
    Имя представления, на основе которого создается именованная статистическая группа. Чтобы для представления можно было создать статистическую группу, оно должно иметь кластеризованный индекс. Имена представлений должны соответствовать требованиям, предъявляемым к идентификаторам. Аргумент view определяет представление, с которым связан аргумент column. Указывать имя владельца представления необязательно. Статистику можно создавать на основе представлений другой базы данных — для этого нужно указать полное имя представления.
  • column
    Столбец или набор столбцов, на основе которого создается статистика. Статистика может быть создана для любого столбца, который может быть указан в качестве ключа индекса. Исключения из этого правила таковы:

    • статистика не может быть создана для столбцов xml;
    • максимально допустимый размер объединенных значений столбца может превышать 900-байтовый предел, ограничивающий значение ключа индекса.

    Вычисляемые столбцы могут быть указаны при вызове этой инструкции только в том случае, если параметры ARITHABORT и QUOTED_IDENTIFIER базы данных имеют значение ON. Столбцы, имеющие пользовательский тип CLR, могут быть указаны, если этот тип поддерживает двоичное упорядочивание. Вычисляемые столбцы, определенные как вызовы методов для столбца пользовательского типа, могут быть указаны, если эти методы отмечены как детерминированные. Дополнительные сведения о создании столбцов, имеющих пользовательский тип CLR, см. в разделе Работа с определяемыми пользователем типами данных CLR.

  • FULLSCAN
    Указывает, что для сбора статистики должны быть считаны все строки table или view. Аргумент FULLSCAN эквивалентен аргументу SAMPLE 100 PERCENT. Использовать аргументы FULLSCAN и SAMPLE вместе нельзя.
  • SAMPLE number { PERCENT | ROWS }
    Указывает, что для сбора статистики нужно считать случайным образом заданный процент или заданное число строк данных. Значение number должно быть целым. Если указан вариант PERCENT, number должно находиться в пределах от 0 до 100; если указан вариант ROWS, number может иметь значение от 0 до общего количества строк n.

    Компонент SQL Server 2005 Database Engine гарантирует, что полезная статистика будет собрана на основе минимального количества значений. Если при использовании параметра PERCENT, ROWS или number выбирается слишком мало строк, компонент Database Engine автоматически корректирует выборку на основе количества строк в таблице или представлении. Выбирается, по меньшей мере, около 1 000 страниц данных. Если при использовании параметра PERCENT, ROWS или number выбирается больше значений, чем нужно для составления полезной выборки, компонент Database Engine пытается достичь запрошенного размера выборки. Однако выборки составляются путем сканирования полных страниц данных, поэтому действительный размер выборки может не совсем точно соответствовать указанному размеру. Если указано 0 PERCENT или ROWS, результатом является пустой набор статистики.

    Аргумент SAMPLE нельзя использовать вместе с аргументом FULLSCAN. Если аргументы SAMPLE или FULLSCAN не указаны, компонент Database Engine составляет выборку автоматически.

  • NORECOMPUTE
    Указывает, что компонент Database Engine не должен автоматически пересчитывать статистику. Если указан этот аргумент, компонент Database Engine даже после изменений данных продолжает использовать статистику, созданную ранее (старую). Автоматическое обновление и сопровождение статистики компонента Database Engine не выполняется. Это может привести к получению не самых эффективных планов.

    ms188038.Caution(ru-ru,SQL.90).gifВнимание!
    Рекомендуем ограничить использование этого аргумента, причем использовать его надлежит только опытным системным администраторам.
  • STATS_STREAM **=**stats_stream
    Этот синтаксис предназначен только для внутреннего использования и не поддерживается. Корпорация Майкрософт оставляет за собой право изменить этот синтаксис в любое время.

Замечания

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

Если параметр базы данных AUTO_UPDATE_STATISTICS имеет значение ON (это значение по умолчанию), а предложение NORECOMPUTE не указано, компонент Database Engine будет автоматически обновлять любую статистику, сформированную вручную.

Инструкцию CREATE STATISTICS можно выполнять для индексированных представлений. Статистическая информация об индексированных представлениях используется оптимизатором только в том случае, если представление непосредственно упоминается в запросе и для представления указана подсказка NOEXPAND. В противном случае статистика составляется на основе базовых таблиц перед подстановкой индексированного представления в план запроса. Такая подстановка поддерживается только в Microsoft SQL Server 2005 Enterprise Edition и Developer Edition.

Разрешения

Требует разрешения ALTER для таблицы или представления.

Примеры

A. Использование инструкции CREATE STATISTICS с аргументом «SAMPLE число PERCENT»

Следующий пример создает статистическую группу (коллекцию) ContactMail1. Статистика рассчитывается на основе случайной выборки пяти процентов данных столбцов ContactID и EmailAddress таблицы Contact базы данных AdventureWorks.

USE AdventureWorks;
GO
CREATE STATISTICS ContactMail1
    ON Person.Contact (ContactID, EmailAddress)
    WITH SAMPLE 5 PERCENT;

Б. Использование инструкции CREATE STATISTICS с аргументами FULLSCAN и NORECOMPUTE

Следующий пример создает статистическую группу (коллекцию) ContactMail2. Статистика рассчитывается на основе всех строк столбцов ContactID и EmailAddress таблицы Contact, при этом автоматический перерасчет статистики блокируется.

CREATE STATISTICS NamePurchase
    ON AdventureWorks.Person.Contact (ContactID, EmailAddress)
    WITH FULLSCAN, NORECOMPUTE;

См. также

Справочник

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

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

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