Инструкция DBCC SHOW_STATISTICS (Transact-SQL)
Инструкция DBCC SHOW_STATISTICS отображает статистику оптимизации текущего запроса для таблицы или индексированного представления. Оптимизатор запросов использует статистику для оценки количества элементов или количества строк в результате запроса, что позволяет оптимизатору запросов создавать высококачественные планы запросов. Например, на основе оценки количества элементов оптимизатор запросов может выбрать в плане запроса оператор поиска по индексу, а не оператор просмотра индекса, повышая производительность запроса за счет использования менее ресурсоемкого поиска по индексу.
Оптимизатор запросов хранит статистические данные по таблице или индексированному представлению в объекте статистики. Объект статистики для таблицы создается по индексу или списку столбцов таблицы. Объект статистики включает заголовок, содержащий метаданные о статистике, гистограмму, содержащую распределение значений в первом ключевом столбце объекта статистики, и вектор плотностей для измерения корреляции с охватом нескольких столбцов. Компонент Ядро СУБД позволяет вычислять оценки количества элементов с применением любых данных в объекте статистики.
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/distinct values для всех значений в первом ключевом столбце объекта статистики после исключения граничных значений гистограммы. Это значение плотности не используется оптимизатором запросов и отображается для обратной совместимости с версиями, выпущенными до 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 |
Density составляет 1 / distinct values. В результатах отображаются плотности для каждого префикса столбцов объекта статистики, по одной строке на плотность. Различающееся значение — это отдельный список значений столбцов на строку и на префикс столбцов. Например, если объект статистики содержит ключевые столбцы (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. Каждый шаг включает диапазон значений столбцов, за которым следует значение столбца, представляющее собой верхнюю границу. В этот диапазон входят все возможные значения столбца между граничными значениями, за исключением самих граничных значений. Наименьшим из отсортированных значений столбца является верхнее граничное значение первого шага гистограммы.
На следующей диаграмме показана гистограмма с шестью шагами. Первый шаг — это область слева от первого верхнего граничного значения.
В каждом шаге гистограммы:
полужирной линией обозначено верхнее граничное значение (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 не предоставляет статистических данных для пространственного или оптимизированного для памяти xVelocity индексов columnstore.
Разрешения
Чтобы просматривать объект статистики, пользователь должен быть владельцем таблицы или членом предопределенной роли сервера sysadmin, предопределенной роли базы данных db_owner или предопределенной роли базы данных db_ddladmin.
В первом общедоступном накопительном обновлении для 2012 Server с пакетом обновления 1 (SP1) изменены ограничения разрешений, теперь пользователи с разрешением SELECT могут использовать эту команду. Обратите внимание, что для того, чтобы разрешение SELECT было достаточным для выполнения команды, существуют следующие требования.
Пользователь должен иметь разрешение для всех столбцов в статистическом объекте.
Пользователь должен иметь разрешение для всех столбцов в условии фильтра (если фильтр задан).
Чтобы отключить это поведение, используйте traceflag 9485.
Примеры
А.Возвращение всех статистических данных
Следующий пример отображает все статистические данные для индекса AK_Product_Name таблицы Person.Address .
USE AdventureWorks2012;
GO
DBCC SHOW_STATISTICS ("Person.Address", AK_Address_rowguid);
GO
Б.Задание параметра HISTOGRAM
В следующем примере ограничиваются статистические данные, отображаемые для индекса AK_Product_Name .
USE AdventureWorks2012;
GO
DBCC SHOW_STATISTICS ("Person.Address", AK_Address_rowguid) WITH HISTOGRAM;
GO
См. также
Справочник
CREATE STATISTICS (Transact-SQL)
DROP STATISTICS (Transact-SQL)
Хранимая процедура sp_autostats (Transact-SQL)
Хранимая процедура sp_createstats (Transact-SQL)
UPDATE STATISTICS (Transact-SQL)