Должны ли поля в индексе базы данных быть уникальными?

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

Ответ

Нет, не должны. Индексы создаются для ускорения поиска и могут быть как уникальными, так и неуникальными.

  • Неуникальный индекс: Допускает дублирование значений в индексируемых столбцах. Используется для оптимизации запросов с условиями WHERE, ORDER BY, JOIN.
    CREATE INDEX idx_department_id ON employees(department_id);
  • Уникальный индекс: Запрещает дублирование значений. Обеспечивает и ускорение запросов, и целостность данных (аналогично ограничению UNIQUE CONSTRAINT).
    CREATE UNIQUE INDEX idx_user_email ON users(email);

Выбор типа индекса зависит от бизнес-логики: нужна ли гарантия уникальности данных или просто повышение производительности запросов по неключевым полям.