Поделиться через


Структуры кластеризованного индекса

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

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

В зависимости от типов данных, каждая структура кластеризованного индекса состоит из одной или более единиц распределения, которые применяются для хранения и управления данными секции. Для каждой секции кластеризованный индекс содержит, как минимум, одну единицу распределения IN_ROW_DATA. Для хранения столбцов больших объектов (LOB) кластеризованному индексу требуется одна единица распределения LOB_DATA для каждой секции. Кроме того, для хранения строк переменной длины, превышающих ограничение на размер строки, равное 8 060 байтам, для каждой секции требуется одна единица распределения ROW_OVERFLOW_DATA. Дополнительные сведения о единицах распределения см. в разделе Организация таблиц и индексов.

Страницы в цепочке данных и строки, которые они содержат, упорядочены по значению ключа кластеризованного индекса. Все строки вставляются так, чтобы значение ключа составляло вместе с существующими строками упорядоченную последовательность. Коллекции страниц сбалансированного дерева закреплены указателями в системном представлении sys.system_internals_allocation_units.

Важное примечаниеВажно!

Системное представление sys.system_internals_allocation_units зарезервировано только для внутреннего использования MicrosoftSQL Server. Совместимость с будущими версиями не гарантируется.

Столбец root_page в таблице sys.system_internals_allocation_units содержит указатели на корневые узлы кластеризованного индекса для каждой секции. SQL Server движется вниз по индексу, чтобы найти строку, соответствующую ключу кластеризованного индекса. Чтобы найти диапазон ключей, SQL Server сначала находит начальное значение ключа в диапазоне, а затем сканирует страницы данных, используя указатели на следующую и предыдущую страницу. Чтобы найти первую страницу в цепочке страниц данных, SQL Server движется по самым левым указателям от корня индекса.

На следующем рисунке изображена структура кластеризованного индекса для одной секции.

Уровни кластеризованного индекса