Создание и управление индексами. Создание и управление встроенными процедурами. Оптимизация производительности запросов. Управление транзакциями и блокировками, страница 7

Оптимизатор запросов активирует создание статистики, когда оптимизирует запросы. Это может быть неудобно, если оптимизатор запросов определил, что статистика отсутствует. План выполнения потребует действия по созданию статистики, что требует дополнительного времени во время выполнения запроса.

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

Создание статистики вручную

Вы можете выполнять оператор CREATE STATISTIC для создания гистограммы и связанной плотности групп для указанной колонки. Вы можете создавать статистика для:

*  Не индексированных колонок;

*  Всех колонок отличных от первой колонки составного индекса;

*  Вычисляемых колонок, только если на такую колонку можно создать индекс;

*  Колонки, которые объявлены как image, text или ntext типы данных.

Создание статистики вручную может принести пользу, когда вы имеете колонку, которая не нуждается в индексе, но статистика на эту колонку может быть полезной для создания более эффективного плана.

Вы должны быть владельцем таблицы для ручного обновления статистики.

Синтаксис:

CREATE STATISTICS statistics_name

ON { table | view } ( column [ ,...n ] )

[ WITH

[ [ FULLSCAN

| SAMPLE number { PERCENT | ROWS } ] [ , ] ]

[ NORECOMPUTE ]

]

Обновление статистики

В определённый момент, статистика может стать устаревшей, что может сказаться на производительности и оптимизаторе запросов.

Сервер SQL обновляет статистическую информацию, когда она устаревает. Количество изменений в данных определяет частоту обновления статистики:

*  Статистика для таблицы содержащей 10000 строк может потребовать обновления, когда 1000 индексных значений изменятся, потому что 1000 значений достаточно большой процент таблицы.

*  Статистика для таблицы содержащей 10,000,000 строк может не потребовать обновления, когда 1000 индексных значений изменятся, потому что это маленький процент таблицы.

Сервер SQL позволяет указать минимальное количество строк. Таблица менее 8 мегабайт всегда сканируется полностью для сбора статистики.

Сервер SQL выдаёт предупреждение, когда статистика устарела или недоступна. Это предупреждение появляется, когда просматривается план выполнения. Вы можете использовать SQL Profiler для наблюдения за событием Missing Column Statistic. Этот класс сообщений определяет, когда статистика отсутствует.

Вы должны позволяет серверу SQL автоматически обновлять статистику для вас. Когда опция auto update statistic включена (это по умолчанию), сервер автоматически обновляет существующую статистику, когда она становится устаревшей.

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

Вы можете выполнять оператор UPDATE STATISTIC для обновления информации о распределённых значениях ключей, для одной или более статистик в таблице. Вы можете захотеть обновить статистику в следующих случаях:

*  Если вы создали индекс, прежде чем поместили туда данные;

*  Таблица уменьшена;

*  Если вы добавляете много строк в таблицу, которая содержит минимум или не содержит данные.

UPDATE STATISTICS table | view

[

index

| ( statistics_name [ ,...n ] )

]

[    WITH

[

[ FULLSCAN ]

| SAMPLE number { PERCENT | ROWS } ]

| RESAMPLE

]

[ [ , ] [ ALL | COLUMNS | INDEX ]

[ [ , ] NORECOMPUTE ]

]

Просмотр статистики

Вы можете просматривать статистику выполняя оператор DBCC SHOW_STATISTICS. Следующая таблица описывает информацию, которую возвращает этот оператор: