yesworld
@yesworld

Как правильно использовать Explain в Mysql?

Всем привет.
Решил вычислить медленный запросы в мускуле slow_query_log.

Нашел один, на тестовой БД записей в этой таблице 90к+ :
SELECT * FROM `Article`
WHERE `Article`.`type` = '1' 
	AND `Article`.`status` = '1' 
	AND `Article`.`publish_t` < '1529399940' 
	AND `Article`.`fixed_t` > '1529399940'
GROUP BY `Article`.`fixed_place`
ORDER BY `Article`.`fixed_t` ASC;


... делаю Explain по нему и получаю следующую картину:
5b28e6960a3cf309289997.jpeg

Добавляю индекс по полю fixed_t и еще раз делаю Explain.
5b28e6cf928fd603185387.jpeg

Смотрю, кол-во записей уменьшилось до 1, но не совсем понятно, почему type стал range. Просто, если читать документацию, то сказано:
The type column of EXPLAIN output describes how tables are joined. The following list describes the join types, ordered from the best type to the worst:


Стоит ли обращать внимание на type?
  • Вопрос задан
  • 107 просмотров
Решения вопроса 1
SagePtr
@SagePtr
Еда - это святое
Потому что теперь стало проще отобрать нужные строки по индексу fixed_t, чем по индексу status.
Сравните:
SELECT COUNT(*) FROM `Article` WHERE `Article`.`status` = 1'

и
SELECT COUNT(*) FROM `Article` WHERE `fixed_t` > 1529399940

Чем меньше строк попадёт под условие - тем лучше. А type = range во втором случае - потому что вы выбираете не точное значение, а от заданного значения до бесконечности.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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