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

«Что такое некластерный индекс в базах данных?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Ключевые особенности:

  • Множество индексов: На одной таблице можно создать множество некластерных индексов.
  • Структура B-дерева: Листовые узлы содержат ключ индекса и указатель (например, значение кластерного ключа или идентификатор строки (RID) в куче).
  • Дополнительный шаг: Для получения данных, не входящих в индекс, требуется дополнительное обращение к основной таблице (кластерному индексу или куче).

Пример создания:

-- Создание некластерного индекса по столбцу last_name
CREATE INDEX idx_lastname ON employees(last_name);

Как работает запрос:

SELECT * FROM employees WHERE last_name = 'Ivanov';
  1. СУБД находит запись 'Ivanov' в индексе idx_lastname.
  2. Из листового узла индекса извлекается указатель (например, id сотрудника).
  3. По этому указателю выполняется поиск в кластерном индексе (или куче) для получения всех данных строки employees.

Компромиссы:

  • Плюсы: Ускоряет операции SELECT, WHERE, ORDER BY, JOIN.
  • Минусы: Занимает дополнительное дисковое пространство; замедляет INSERT, UPDATE, DELETE, так как требует обновления самих индексов.