Gymterview
middle

В чем отличие между кластерными и некластерными индексами?

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

Сравнение

Характеристика Кластерный индекс Некластерный индекс
Физический порядок данных Данные упорядочены по ключу индекса Произвольный
Количество на таблицу Один Много
Скорость последовательного чтения Высокая (данные рядом на диске) Зависит от фактора кластеризации
Скорость вставки Медленная (нужно поддерживать порядок) Быстрее
Дополнительное место Минимальное (данные = индекс) Требует отдельную структуру
Листовые узлы содержат Сами данные строки Указатели на строки

Как это работает

Кластерный индекс — это как телефонный справочник, где записи физически упорядочены по фамилии. Чтобы найти всех людей на букву «К», достаточно открыть нужную страницу и читать подряд.

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

Фактор кластеризации

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

Особенности в разных СУБД

СУБД Кластерный индекс
MySQL (InnoDB) Таблица всегда кластеризована по PK (если нет PK, генерируется скрытый)
PostgreSQL Команда CLUSTER, но не поддерживается автоматически при INSERT
SQL Server CLUSTERED INDEX, один на таблицу

На собеседовании: интервьюер хочет услышать ключевую разницу: кластерный = физический порядок данных, некластерный = отдельная структура со ссылками. Частая ошибка — не знать, что в InnoDB (MySQL) таблица всегда кластеризована по первичному ключу.