Какие факторы нужно учитывать при проектировании индекса в базе данных?

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

Ответ

Создание эффективного индекса требует анализа запросов и данных. Основные критерии:

  1. Нагрузка запросов: Индексируйте столбцы, которые часто фигурируют в условиях WHERE, JOIN, ORDER BY, GROUP BY.
  2. Селективность: Приоритет — столбцы с высоким количеством уникальных значений (например, id, email). Индекс по полю с двумя значениями (gender) почти бесполезен.
  3. Тип индекса:
    • B-tree — для диапазонов (BETWEEN, >, <) и сортировки.
    • Hash — только для точного совпадения (=).
    • Составной (композитный) — для условий по нескольким столбцам. Порядок столбцов критичен!
  4. Влияние на запись: Каждый индекс замедляет операции INSERT, UPDATE, DELETE и увеличивает объем хранилища. Необходим баланс.

Пример составного индекса:

-- Индекс эффективен для запросов с условием по department_id ИЛИ по department_id + salary.
CREATE INDEX idx_emp_dept_salary ON employees (department_id, salary);

Ограничения: Индексы обычно не используются, если:

  • В условии применяется функция к столбцу (WHERE UPPER(name) = '...').
  • Используется LIKE с начальным wildcard ('%text').