Почему этот запрос explain не содержит «using where»

#mysql

#mysql

Вопрос:

введите описание изображения здесь

Я тестирую запросы для своего веб-сайта (разрабатываю), но я обнаружил, что есть что-то странное, чего я не могу понять, посмотрите на строку с красной звездочкой — почему этот запрос explain не содержит «using where»

Может ли кто-нибудь объяснить это? Большое вам спасибо

загрузка образца mysqldump (zip 46.9 MB): https://drive.google.com/open?id=0B3ve2F7eRJk4eUJteXppRVYzMk0

MariaDB 10.1.9 — Движок InnoDB

Комментарии:

1. На первый взгляд я бы сказал , что у log_timesamp есть индекс (который можно использовать в запросе), а у log_type его нет.

2. log_type не так важен, я добавил его, чтобы увидеть дополнительную информацию.

3. На самом деле мне интересно обратное: почему в вашем запросе от 2-го до последнего вообще есть «using where», хотя я думаю, что ваш последний план выполнения правильный. ICP не должен быть «using where» там. Какая у вас версия mysql?

4. Только что протестировал: ICP в 5.7 работает как ожидалось, 5.6 показывает ваше поведение при использовании order by и имеет пробел в вашем составном индексе. Вы можете включить отсутствующий index-column в свой запрос от 2-го до последнего, например and not log_action is null (если это не исключает какую-либо строку — смысл в том, чтобы просто включить столбец в запрос, чтобы не пропустить столбец индекса), чтобы избавиться от using where too . Вероятно, это не квалифицируется как ошибка, это просто менее оптимальное поведение, но именно поэтому мы получаем новые версии mysql с улучшенными оптимизаторами.

5. «using where» во 2-м запросе, потому что поле «log_type» отсутствует в индексе с несколькими столбцами, поэтому запрос использует только индекс log_user (1-й столбец в индексе с несколькими столбцами), а затем «using where» для фильтрации результата. Интересно, запрос Red Star тоже должен быть, но это не так, я в замешательстве. (Обновите мой вопрос, чтобы добавить пример файла и информацию о версии mysql)