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

Некластеризованные индексы имеют ту же структуру сбалансированного дерева, что и кластеризованные индексы; существуют только следующие различия:

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

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

Указатели строк на строках некластеризованных индексов являются либо указателем на строку, либо ключом кластеризованного индекса для строки, как описано ниже:

  • Если таблица является кучей, что означает, что она не содержит кластеризованный индекс, то обнаружитель строки является указателем на строку. Указатель строится на основе идентификатора файла (ID), номера страницы и номера строки на странице. Весь указатель целиком называется идентификатором строки (RID).
  • Если для таблицы имеется кластеризованный индекс или индекс построен на индексированном представлении, то указатель строки — это ключ кластеризованного индекса для строки. Если кластеризованный индекс не является уникальным индексом, то SQL Server 2005 делает все имеющиеся повторяющиеся ключи уникальными путем добавления внутри созданного значения, называемого uniqueifier. Это четырехбайтовое значение не видимо для пользователей. Оно используется тогда, когда необходимо сделать кластеризованный ключ уникальным, чтобы использовать в некластеризованных индексах. SQL Server восстанавливает строку данных путем поиска по кластеризованному индексу, используя ключ кластеризованного индекса, который хранится в конечной строке некластеризованного индекса.

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

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

ms177484.note(ru-ru,SQL.90).gifВажно!
Системное представление sys.system_internals_allocation_units предназначено только для внутреннего использования и может быть изменено. Совместимость не гарантируется.

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

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

Индексы с включенными столбцами

В SQL Server 2005 можно расширить функциональность некластеризованных индексов путем добавления включенных столбцов, называемых неключевыми столбцами конечного уровня индекса. Ключевые столбцы хранятся на всех уровнях некластеризованного индекса, тогда как неключевые столбцы хранятся только на конечном уровне. Дополнительные сведения см. в разделе Индекс с включенными столбцами.

См. также

Основные понятия

Структуры кластеризованного индекса
Структуры кучи
Организация таблиц и индексов

Справка и поддержка

Получение помощи по SQL Server 2005