Почему важен порядок столбцов в составном индексе базы данных?

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

Ответ

Да, порядок критически важен. Составной индекс (multi-column index) эффективен только для запросов, использующих префикс его столбцов в том же порядке.

Принцип работы: Индекс (A, B, C) может быть использован для фильтрации по:

  • (A)
  • (A, B)
  • (A, B, C)

Но НЕ для:

  • (B) или (C) (пропущен ведущий столбец)
  • (B, A) (нарушен порядок)

Пример SQL:

CREATE INDEX idx_name_age ON users(last_name, first_name, age);

Эффективные запросы:

WHERE last_name = 'Ivanov'
WHERE last_name = 'Ivanov' AND first_name = 'Petr'
WHERE last_name = 'Ivanov' AND first_name = 'Petr' AND age > 30

Неэффективные запросы:

WHERE first_name = 'Petr'              -- Пропущен last_name
WHERE age > 30                         -- Пропущены last_name и first_name
WHERE first_name = 'Petr' AND age > 30 -- Пропущен last_name

Практическое правило: Располагайте столбцы в порядке убывания селективности (от наиболее уникального к наименее уникальному) и в соответствии с частыми шаблонами запросов.