Структуры некластеризованного индекса
Некластеризованные индексы имеют ту же структуру сбалансированного дерева, что и кластеризованные индексы; существуют только следующие различия:
· строки данных в базовой таблице не сортируются и хранятся в порядке, который основан на их некластеризованных ключах;
· конечный уровень некластеризованного индекса состоит из страниц индекса вместо страниц данных.
Некластеризованные индексы могут определяться на таблице или представлении с кластеризованным индексом, или на куче. Для каждой таблицы можно создать до 999 некластеризованных индексов.
Каждая строка некластеризованного индекса содержит некластеризованное ключевое значение и указатель на строку. Этот указатель определяет строку данных кластеризованного индекса или кучи, содержащую ключевое значение.
Указатели строк на строках некластеризованных индексов являются либо указателем на строку, либо ключом кластеризованного индекса для строки, как описано ниже.
· Если таблица является кучей, что означает, что она не содержит кластеризованный индекс, то указатель строки является указателем на строку. Указатель строится на основе идентификатора файла (ID), номера страницы и номера строки на странице. Весь указатель целиком называется идентификатором строки (RID).
· Если для таблицы имеется кластеризованный индекс, то указатель строки - это ключ кластеризованного индекса для строки. Поскольку значение ключа кластеризованного индекса будет копироваться по все строки всех некластеризованных индексов созданных на данной таблице, необходимо очень тщательно выбирать столбцы для создания кластеризованного индекса. Использование в качестве ключа столбцов хранящих данные большой размерности может существенно увеличить место, необходимо для хранения таблицы и всех созданных на ней индексов.
Если кластеризованный индекс не является уникальным индексом, то SQL Server делает все имеющиеся повторяющиеся ключи уникальными путем добавления внутри созданного значения, называемого uniqueifier. Это четырехбайтовое значение невидимо для пользователей. Оно используется тогда, когда необходимо сделать кластеризованный ключ уникальным, чтобы использовать в некластеризованных индексах.
SQL Server получает строку данных путем поиска по кластеризованному индексу, используя ключ кластеризованного индекса, который хранится в конечной строке некластеризованного индекса.
По умолчанию некластеризованный индекс включает одну секцию. Если некластеризованный индекс состоит из нескольких секций, то каждая секция имеет структуру сбалансированного дерева, в которой содержатся индексные строки для данной конкретной секции.
На следующей иллюстрации показана структура некластеризованного индекса, состоящего из одной секции.
Оптимизация индексов