Ответ
Эффективность составного индекса кардинально изменится. Порядок столбцов определяет, для каких запросов индекс будет применим. Индекс работает по принципу «слева направо».
Правило: Составной индекс (col1, col2, col3) может быть использован для запросов, фильтрующих по:
col1col1, col2col1, col2, col3
Но он НЕ будет эффективно использоваться (или не будет использоваться вовсе) для запросов, которые начинаются с col2 или col3 без col1.
Пример: Для таблицы users с индексом (last_name, first_name).
-- ИСПОЛЬЗУЕТ индекс эффективно (идет по первому столбцу)
SELECT * FROM users WHERE last_name = 'Ivanov';
SELECT * FROM users WHERE last_name = 'Ivanov' AND first_name = 'Petr';
-- НЕ ИСПОЛЬЗУЕТ индекс или использует неэффективно (пропуск первого столбца)
SELECT * FROM users WHERE first_name = 'Petr';
Рекомендации по порядку:
- Самый селективный столбец (с наибольшим количеством уникальных значений) часто ставят первым.
- Столбцы, используемые в условиях
WHEREс операторами=, должны идти перед столбцами с диапазонными условиями (>,<,BETWEEN,LIKE). - Столбцы, используемые в
ORDER BY, можно добавить в конец индекса для покрывающих запросов (covering index).