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

Инструкция DBCC SHOW_STATISTICS отображает статистику оптимизации текущего запроса для таблицы или индексированного представления. Оптимизатор запросов использует статистику для оценки количества элементов или количества строк в результате запроса, что позволяет оптимизатору запросов создавать высококачественные планы запросов. Например, на основе оценки количества элементов оптимизатор запросов может выбрать в плане запроса оператор поиска по индексу, а не оператор просмотра индекса, повышая производительность запроса за счет использования менее ресурсоемкого поиска по индексу.

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

DBCC SHOW_STATISTICS отображает заголовок, гистограмму и вектор плотностей на основе данных, хранящихся в объекте статистики. Применяемый синтаксис позволяет указывать таблицу или индексированное представление вместе с именем целевого индекса, именем статистики или именем столбца. В этом разделе описывается, как отображать статистику и трактовать отображаемые результаты.

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

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

Синтаксис

DBCC SHOW_STATISTICS ( table_or_indexed_view_name , target ) 
[ WITH [ NO_INFOMSGS ] < option > [ , n ] ]
< option > :: =
    STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM

Аргументы

  • table_or_indexed_view_name
    Имя таблицы или индексированного представления, для которого должны быть отображены статистические данные.

  • target
    Имя индекса, статистики или столбца, для которого отображаются статистические данные. Если аргумент target является именем существующего индекса или статистики по таблице или индексированному представлению, будут возвращены статистические данные об этом адресате. Если target представляет собой имя существующего столбца и имеется статистика, автоматически созданная по данным этого столбца, возвращаются сведения об этой автоматически созданной статистике. Если автоматически созданная статистика для целевого столбца отсутствует, возвращается сообщение об ошибке 2767.

  • NO_INFOMSGS
    Подавляет все информационные сообщения со степенями серьезности от 0 до 10.

  • STAT_HEADER | DENSITY_VECTOR | HISTOGRAM | STATS_STREAM [ **,**n ]
    Указание одного или более из этих параметров ограничивает результирующие наборы, которые инструкция возвращает указанному параметру или параметрам. Если параметры не указаны, то возвращаются все статистические данные.

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

Результирующие наборы

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

Имя столбца

Описание

Name

Имя объекта статистики.

Updated

Дата и время последнего обновления статистики. Функция STATS_DATE представляет собой альтернативный способ получения этих данных.

Rows

Общее число строк в таблице или индексированном представлении при последнем обновлении статистики. Если статистика отфильтрована или соответствует отфильтрованному индексу, количество строк может быть меньше, чем количество строк в таблице. Дополнительные сведения см. в разделе Использование статистики для повышения производительности запросов.

Rows Sampled

Общее количество строк, выбранных для статистических вычислений. Если имеет место условие «количество строк выборки < количество строк таблицы», то отображаемые результаты определения гистограммы и вычисления плотности представляют собой оценки, основанные на строках выборки.

Steps

Число шагов в гистограмме. Каждый шаг охватывает диапазон значений столбцов, за которым следует значение столбца, представляющее собой верхнюю границу. Шаги гистограммы определяются в первом ключевом столбце статистики. Максимальное число шагов — 200.

Density

Вычисляется как «1/различающиеся значения» для всех значений в первом ключевом столбце объекта статистики, за исключением граничных значений гистограммы. Это значение плотности не используется оптимизатором запросов и отображается для обратной совместимости с версиями, выпущенными до SQL Server 2008.

Average Key Length

Среднее число байт на значение для всех ключевых столбцов в объекте статистики.

String Index

Значение «Да» указывает, что объект статистики содержит сводную строковую статистику, позволяющую уточнить оценку количества элементов для предикатов запроса, использующих оператор LIKE, например WHERE ProductName LIKE '%Bike'. Сводная строковая статистика хранится отдельно от гистограммы и создается в первом ключевом столбце объекта статистики, если он имеет тип char, varchar, nchar, nvarchar, varchar(max), nvarchar(max), text или ntext.

Filter Expression

Предикат для подмножества строк таблицы, включенных в объект статистики. NULL — неотфильтрованная статистика. Дополнительные сведения об отфильтрованных предикатах см. в разделе Рекомендации по проектированию отфильтрованных индексов. Дополнительные сведения об отфильтрованной статистике см. в разделе Использование статистики для повышения производительности запросов.

Unfiltered Rows

Общее количество строк в таблице перед применением критерия фильтра. Если Filter Expression имеет значение NULL, то столбец Unfiltered Rows совпадает со столбцом Rows.

Следующая таблица описывает столбцы, возвращаемые в результирующий набор, если указан параметр DENSITY_VECTOR.

Имя столбца

Описание

All Density

Плотность равна «1/различающиеся значения». В результатах отображаются плотности для каждого префикса столбцов объекта статистики, по одной строке на плотность. Различающееся значение — это отдельный список значений столбцов на строку и на префикс столбцов. Например, если объект статистики содержит ключевые столбцы (A, B, C), то в результатах приводится плотность отдельных списков значений в каждом из следующих префиксов столбцов: (A), (A, B) и (A, B, C). При использовании префикса (A, B, C) каждый из этих списков является отдельным списком значений: (3, 5, 6), (4, 4, 6), (4, 5, 6), (4, 5, 7). При использовании префикса (A, B) одинаковые значения столбцов имеют следующие отдельные списки значений: (3, 5), (4, 4) и (4, 5).

Average Length

Средняя длина (в байтах) для хранения списка значений столбца для данного префикса столбца. Если каждому значению в списке (3, 5, 6), например, требуется по 4 байта, то длина составляет 12 байт.

Columns

Имена столбцов в префиксе, для которых отображаются значения All density и Average length.

Следующая таблица описывает столбцы, возвращаемые в результирующий набор, если указан параметр HISTOGRAM.

Имя столбца

Описание

RANGE_HI_KEY

Верхнее граничное значение столбца для шага гистограммы. Это значение столбца называется также ключевым значением.

RANGE_ROWS

Предполагаемое количество строк, значение столбцов которых находится в пределах шага гистограммы, исключая верхнюю границу.

EQ_ROWS

Предполагаемое количество строк, значение столбцов которых равно верхней границе шага гистограммы.

DISTINCT_RANGE_ROWS

Предполагаемое количество строк с различающимся значением столбца в пределах шага гистограммы, исключая верхнюю границу.

AVG_RANGE_ROWS

Среднее количество строк с повторяющимися значениями столбцов в пределах шага гистограммы, исключая верхнюю границу (RANGE_ROWS/DISTINCT_RANGE_ROWS для DISTINCT_RANGE_ROWS > 0).

Замечания

Гистограмма

Гистограмма измеряет частоту появления каждого различающегося значения в наборе данных. Оптимизатор запросов вычисляет гистограмму для значений столбца в первом ключевом столбце объекта статистики, выбирая значения столбцов путем статистической выборки строк или при помощи полного просмотра всех строк в таблице или представлении. Если гистограмма создается на основе выбранного набора строк, то сохраняемые итоговые значения количества строк и количества различающихся значений являются приблизительными и не всегда выражаются целыми числами.

Чтобы создать гистограмму, оптимизатор запросов сортирует значения столбцов, вычисляет количество значений, совпадающих с каждым различающимся значением столбца, а затем осуществляет статистическую обработку значений столбцов с получением непрерывных шагов гистограммы, максимальное количество которых составляет 200. Каждый шаг включает диапазон значений столбцов, за которым следует значение столбца, представляющее собой верхнюю границу. В этот диапазон входят все возможные значения столбца между граничными значениями, за исключением самих граничных значений. Наименьшим из отсортированных значений столбца является верхнее граничное значение первого шага гистограммы.

На следующей диаграмме показана гистограмма с шестью шагами. Первый шаг — это область слева от первого верхнего граничного значения.

Гистограмма с 6 шагами

В каждом шаге гистограммы:

  • полужирной линией обозначено верхнее граничное значение (RANGE_HI_KEY) и количество его вхождений (EQ_ROWS);

  • закрашенная область слева от RANGE_HI_KEY обозначает диапазон значений столбца и среднее количество вхождений каждого значения столбца (AVG_RANGE_ROWS). В первом шаге гистограммы значение AVG_RANGE_ROWS всегда равно 0;

  • пунктирные линии обозначают выбранные значения, которые используются для оценки общего числа различающихся значений (DISTINCT_RANGE_ROWS) и общего числа значений в диапазоне (RANGE_ROWS). Оптимизатор запросов использует RANGE_ROWS и DISTINCT_RANGE_ROWS для вычисления AVG_RANGE_ROWS и не хранит выбранные значения.

Оптимизатор запросов определяет шаги гистограммы согласно их статистической значимости. Он использует алгоритм максимальной разности для сведения к минимуму числа шагов в гистограмме и вместе с тем максимального увеличения разницы между граничными значениями. Максимальное число шагов — 200. Число шагов гистограммы может быть меньше, чем количество различающихся значений, даже для столбцов, в которых число граничных точек меньше 200. Например, столбец со 100 различающимися значениями может иметь гистограмму, число граничных точек в которой меньше 100.

Вектор плотностей

Оптимизатор запросов использует плотности для улучшения оценок количества элементов для запросов, которые возвращают данные нескольких столбцов из одной таблицы или индексированного представления. Вектор плотностей содержит по одной плотности для каждого префикса столбцов объекта статистики. Если объект статистики, например, имеет ключевые столбцы CustomerId, ItemId и Price, то плотность вычисляется для каждого из следующих префиксов столбцов.

Префикс столбца

Префикс, по которому вычисляется плотность.

(CustomerId)

Строки с совпадающими значениями CustomerId.

(CustomerId, ItemId)

Строки с совпадающими значениями CustomerId и ItemId.

(CustomerId, ItemId, Price)

Строки с совпадающими значениями CustomerId, ItemId и Price.

Ограничения

Инструкция DBCC SHOW_STATISTICS не предоставляет статистические данные для пространственных индексов.

Разрешения

Чтобы просматривать объект статистики, пользователь должен владеть таблицей или входить в предопределенную роль сервера sysadmin, предопределенную роль базы данных db_owner или предопределенную роль базы данных db_ddladmin.

Примеры

А. Возвращение всех статистических данных

Следующий пример отображает все статистические данные для индекса AK_Product_Name таблицы Person.Address .

USE AdventureWorks2008R2;
GO
DBCC SHOW_STATISTICS ("Person.Address", AK_Address_rowguid);
GO

Б. Задание параметра HISTOGRAM

В следующем примере ограничиваются статистические данные, отображаемые для индекса AK_Product_Name .

USE AdventureWorks2008R2;
GO
DBCC SHOW_STATISTICS ("Person.Address", AK_Address_rowguid) WITH HISTOGRAM;
GO