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

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

Ответ

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

Сравнение с некластерным индексом: Кластерный индекс Некластерный индекс
Упорядочивает сами данные (таблицу) Создает отдельную структуру (как оглавление)
Один на таблицу Много на таблицу
Быстрые диапазонные запросы (данные рядом) Быстрый поиск по ключу, но дополнительный шаг для данных

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

-- В SQL Server (явное указание)
CREATE CLUSTERED INDEX IX_Users_Id ON Users(Id);

-- В MySQL/PostgreSQL: PRIMARY KEY обычно создает кластерный индекс
CREATE TABLE Users (
    Id INT PRIMARY KEY, -- Создает кластерный индекс
    Name VARCHAR(100)
);

Плюсы и минусы:

  • Плюсы: Высокая скорость выборки по диапазону значений индекса (например, WHERE Id BETWEEN 100 AND 200).
  • Минусы: Замедление операций INSERT, UPDATE, DELETE, если они меняют значение ключа и требуют физического перемещения строки.

Влияние на разработку: При использовании ORM (Hibernate, JPA) выбор правильного поля для кластерного индекса (часто первичный ключ) критически важен для производительности.