Довольно много прочитал методик по оптимизации запросов при помощи индексов. Оказалось, что до этого мои знания об индексах были довольно фрагментарны и неточны. Но один фактор я не смог достаточно четко выяснить.
Представим, есть таблица user с полями id, date, sex, name. Мы можем создать сложный индекс INDEX(date, sex).
В связи с этим первый вопрос:
имеет ли значение порядок самих условий в запросе. То есть, будет ли разница между
select * from user WHERE date='2016-03-03' AND sex='male' И
select * from user WHERE sex='male' AND date='2016-03-03' ?
Или MySQL достаточно умен, чтобы самому расположить все в правильном порядке для индекса?
И, собственно, второй вопрос. Если наложить отдельно индексы на date и на sex. Да, это будет менее эффективно, чем комплексный индекс, но будут ли задействованы оба индекса, или только первый, который попадется, а второй будет упущен?
Тут есть несколько моментов:
1). Да, порядок перечисления условий в запросе в данном случае значения не имеет
2). Если ииндексы отдельные, то планировщик запроса может использовать оба, НО:
3). В данном случае индекс по sex имеет очень плохую селективность ( www.akadia.com/services/ora_index_selectivity.html ), так что я бы поставил надкусанный огурец против португальского эскудо на использование индекса по date и последовательное сканирование того, что выбралось
4). Однако чтобы окончательно прояснить для себя, что действительно используетcя нужно запустить explain и эти вопросы отпадут ( и появятся новые :))