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

Когда вы используете DROP_EXISTING, примите к сведению следующие факты и рекомендации:

*  Для кластерного индекса сервер требует пространство для физического перестроения индекса;

*  Опция DROP_EXISTING ускоряет процесс построения кластерного и не кластерного индекса с помощью исключения процесса сортировки;

*  Вы не можете перестроить индексы на системной таблице;

*  Опция DROP_EXISTING на кластерном индексе помогает вам избежать ненужной работы по удалению и воссозданию не кластерного индекса, если кластерный индекс перестраивается на той же колонке;

*  Не кластерный индекс перестраивается только однажды и если ключи разные.

Пример

Этот пример перестраивает существующие индексы. Индекс перестраивается как кластерный, составной со значением заполнения страниц 65%. Этот оператор выдаст ошибку, если кластерный индекс для данной таблицы уже существует:

CREATE UNIQUE NONCLUSTERED INDEX U_OrdID_ProdID

ON [Order Details] (OrderID, ProductID)

WITH DROP_EXISTING, FILLFACTOR=65

7.4 Лабораторные

Создание индекса

Выполните следующий код для создания индекса:

USE ClassNorthwind

SET NOCOUNT ON

GO

/*   

**  If the objects already exist (i.e. if this is a rebuild), drop them.

*/

IF EXISTS (SELECT name FROM sysindexes WHERE name =

'Orders_Customers_link')

DROP INDEX  Orders.Orders_Customers_link

GO

/*  Create the Index with a FILLFACTOR of 75  */

CREATE  NONCLUSTERED INDEX Orders_Customers_link ON Orders(CustomerID)

WITH FILLFACTOR = 75

GO

SET NOCOUNT OFF

GO

Для получения информации о индексе выполните:

EXEC sp_help Orders

Рассмотрите в качестве дополнительного примера скрипт из файла CreaIndx2.SQL.

Проверка структуры индекса

Для проверки структуры индекса используйте скрипт из файла ExamIndex.SQL.

7.5 Введение в статистику

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

Как собирается статистика

Сервер SQL собирает статистику с помощью чтения всех значений колонок или шаблона значений колонок для создания равномерного распределённого и отсортированного списка значений, известного как распределённые шаги. Сервер SQL динамически определяет процент строк, которые должны быть опробованы, основываясь на количестве строк в таблице. Оптимизатор запросов выполняет одно из двух – полное сканирование или шаблоны строк при сборке статистики.

*  Опция SAMPLE (шаблон) – это значение по умолчанию для обновления и создания статистики;

*  Опция FULLSCAN (полное сканирование) используется когда:

o  Создаётся индекс;

o  Опция FULLSCAN указана в операторе CREATE STATISTICS.

o  Выполнен оператор UPDATE TATISTICS.

Как хранится статистика

Каждое значение, хранящееся в колонке, называется распределённым шагом. Распределённый шаг ссылается на пространство между шаблонами или как много строк существует между началом и концом шага. Первое и последнее значение всегда включаются в статистику. Здесь может быть до 300 значений.

В дополнении сохраняется:

*  Дата и время, когда статистика последний раз обновлялась;

*  Количество строк в таблице;

*  Количество строк шаблона для создания гистограммы и определения плотности;

*  Количество распределённых шагов;

*  Среднее значение ключа;

*  Плотность индивидуальной колонки и всех комбинированных колонок;

*  Количество строк, попавших шаг гистограммы;

*  Количество строк, которые равны значению верхней границы шага;

*  Количество определённых значений в шаге гистограммы.

Создание статистики

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

Когда опция базы данных auto create statistics включена, сервер автоматически предоставляет для вас статистику для:

*  Индексных колонок, которые содержат данные;

*  Не индексированных колонок, которые используются для объединения.