Ответ
Кластерный индекс — это индекс, который определяет физический порядок хранения строк данных в таблице на диске. Таблица может иметь только один кластерный индекс (за редкими исключениями), так как данные могут быть упорядочены только одним способом.
| Сравнение с некластерным индексом: | Кластерный индекс | Некластерный индекс |
|---|---|---|
| Упорядочивает сами данные (таблицу) | Создает отдельную структуру (как оглавление) | |
| Один на таблицу | Много на таблицу | |
| Быстрые диапазонные запросы (данные рядом) | Быстрый поиск по ключу, но дополнительный шаг для данных |
Пример создания:
-- В 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) выбор правильного поля для кластерного индекса (часто первичный ключ) критически важен для производительности.