В самом простом случае, бывают 2 вида индексов - одиночные и составные.
Например, для запроса
SELECT * FROM `users` WHERE `age` > 20
Нам понадобится индекс для поля age.
А вот в таком запросе
SELECT * FROM `users` WHERE `age` > 20 AND `gender` = 'male'
Нам нужен составной индекс age_gender, потому что MySQL использует только 1 индекс на запрос, соответственно, если у нас будут 2 отдельных индекса для age и для gender, то использован будет только 1.
Как с этим жить, если проект в разработке, запросы разные и появляются новые.
Например есть запрос
SELECT * FROM `users` WHERE `age` > 20 AND `gender` = 'male' ORDER BY `name`
И для него я создам индекс age_gender_name
А есть такой же запрос, но сортировка по рейтингу
SELECT * FROM `users` WHERE `age` > 20 AND `gender` = 'male' ORDER BY `rating`
Или же порядок полей может меняться.
Создавать индексы под все варианты запросов?
Как правильно делать?