Akdmeh
@Akdmeh
PHP, Yii2, Music

Работает ли второй индекс после первого?

Довольно много прочитал методик по оптимизации запросов при помощи индексов. Оказалось, что до этого мои знания об индексах были довольно фрагментарны и неточны. Но один фактор я не смог достаточно четко выяснить.
Представим, есть таблица 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. Да, это будет менее эффективно, чем комплексный индекс, но будут ли задействованы оба индекса, или только первый, который попадется, а второй будет упущен?
  • Вопрос задан
  • 256 просмотров
Решения вопроса 2
terrier
@terrier
Тут есть несколько моментов:
1). Да, порядок перечисления условий в запросе в данном случае значения не имеет
2). Если ииндексы отдельные, то планировщик запроса может использовать оба, НО:
3). В данном случае индекс по sex имеет очень плохую селективность ( www.akadia.com/services/ora_index_selectivity.html ), так что я бы поставил надкусанный огурец против португальского эскудо на использование индекса по date и последовательное сканирование того, что выбралось
4). Однако чтобы окончательно прояснить для себя, что действительно используетcя нужно запустить explain и эти вопросы отпадут ( и появятся новые :))
Ответ написан
Melkij
@Melkij
PostgreSQL DBA
Порядок условий в запросе значения не имеет. mysql тупой, но, к счастью, не до такой степени.

По второму вопросу: на усмотрение планировщика. index merge mysql умеет, но это может быть дороже поиска по одному индексу и дальнейшей фильтрации.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы