← Назад к вопросам

Что хранит в себе некластерный индекс?

1.0 Junior🔥 121 комментариев
#Soft Skills и карьера

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что хранит в себе некластерный индекс?

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

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

Некластерный индекс хранит:

  1. Ключевые столбцы — значения столбцов, по которым построен индекс (например, email, username)
  2. Row Locator — указатель на строку в таблице:
    • Если таблица имеет кластерный индекс — это значение кластерного ключа (более эффективно)
    • Если таблица — heap (без кластерного индекса) — это физический указатель на строку (RID: Row Identifier)
  3. Включённые столбцы (опционально) — дополнительные столбцы, добавленные через INCLUDE, чтобы избежать обращения к основной таблице

Пример структуры

// Таблица Users
// +--------+----------+-------+--------+
// | UserID | Email    | Name  | Phone  |
// +--------+----------+-------+--------+
// |   1    | a@ex.com | Alice | 12345  |
// |   2    | b@ex.com | Bob   | 67890  |
// |   3    | c@ex.com | Carol | 11111  |
// +--------+----------+-------+--------+

// Некластерный индекс на Email:
// +----------+--------+
// | Email    | RID    |
// +----------+--------+
// | a@ex.com | (1:96) |
// | b@ex.com | (1:104)|
// | c@ex.com | (1:112)|
// +----------+--------+

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

Когда выполняется запрос:

SELECT * FROM Users WHERE Email = 'john@example.com';

База данных:

  1. Использует некластерный индекс на Email для бинарного поиска значения 'john@example.com'
  2. Находит Row Locator (указатель на строку)
  3. По этому указателю переходит в основную таблицу и извлекает остальные данные
  4. Возвращает результат

Этот процесс называется Key Lookup или Bookmark Lookup.

Отличие от кластерного индекса

ХарактеристикаКластерныйНекластерный
Структура храненияОпределяет физический порядокСоздаёт логическую структуру
Количество на таблицуМаксимум 1До 999
Row LocatorКластерный ключ или RIDКластерный ключ или RID
Скорость поискаБыстрее (прямой доступ)Медленнее (требует lookup)

Оптимизация: включённые столбцы

Для улучшения производительности можно добавить часто запрашиваемые столбцы:

// Индекс с включённым столбцом Name
CREATE NONCLUSTERED INDEX IX_Users_Email 
ON Users(Email) 
INCLUDE (Name);

// Теперь для запроса:
SELECT Email, Name FROM Users WHERE Email = 'john@example.com';
// База может прочитать данные только из индекса (Index Coverage)
// и избежать обращения к основной таблице

Key Takeaway

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

Что хранит в себе некластерный индекс? | PrepBro