Создание индексов и управление индексами

Структура хранения данных

 

Таблицы хранятся в виде коллекции страниц размером 8 КБ. Далее иллюстрация показывает организацию таблицы. Таблица содержится в одной или нескольких секциях, а каждая секция содержит строки данных либо в куче, либо в структуре кластеризованного индекса.

 

Таблицы SQL Server используют один из двух методов организации страниц данных внутри секции:

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

· Кучи - это таблицы, которые не имеют кластеризованного индекса.
Строки данных хранятся без определенного порядка, и какой-либо порядок в последовательности страниц данных отсутствует. Страницы данных не связаны в связный список. Поиск строк требует полного последовательного просмотра всех строк таблицы.

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

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

Необходимо определить, что важнее - повышение производительности запросов или производительность при изменении данных и дополнительные требования к месту на диске.

Кучи

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

Внутренние структуры SQL Server хранят указатель на первую IAM-страницу в цепи IAM-страниц, SQL Server использует IAM-страницы для перемещения по куче. Страницы данных и строки в этих страницах не расположены в каком-либо порядке и не связаны. Единственным логическим соединением страниц данных являются данные, записанные в IAM-страницы.

Просмотр таблиц или последовательное считывание в куче может выполняться просмотром IAM-страниц для нахождения экстентов, хранящих страницы кучи. Так как карта IAM представляет экстенты в том же порядке, в котором они существуют в файлах данных, это означает, что последовательный просмотр кучи выполняется последовательно в каждом файле. Использование IAM-страниц для определения последовательности просмотра означает также, что строки из кучи обычно возвращаются не в том порядке, в котором они вставлялись.

На следующей иллюстрации демонстрируется, как компонент SQL Server Database Engine использует IAM-страницы для получения строк данных из кучи с одной секцией.