Ответ
Да, порядок критически важен. Составной индекс (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
Практическое правило: Располагайте столбцы в порядке убывания селективности (от наиболее уникального к наименее уникальному) и в соответствии с частыми шаблонами запросов.