EXPLAIN в Mysql
Опубликовано: 20.10.2017
Для анализа медленных запросов в Mysql используется инструкция EXPLAIN:
EXPLAIN [запрос]Пример анализа запроса, использующего индекс:
EXPLAIN select * from users where email = '[email protected]'; +----+-------------+-------+-------+---------------+-------+---------+-------+------+-------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+-------+---------------+-------+---------+-------+------+-------+ | 1 | SIMPLE | users | const | email | email | 767 | const | 1 | | +----+-------------+-------+-------+---------------+-------+---------+-------+------+-------+Внимание стоит обратить на колонку key — в ней должно быть название индекса , который использует Mysql для выборки. Колонка rows покажет количество обработанных строк (должно быть очень маленьким — десятки...сотни).
Пример EXPLAIN для медленного запроса:
EXPLAIN select * from users where email like '%golotyuk%'; +----+-------------+-------+------+---------------+------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+------+---------------+------+---------+------+------+-------------+ | 1 | SIMPLE | users | ALL | NULL | NULL | NULL | NULL | 2154 | Using where | +----+-------------+-------+------+---------------+------+---------+------+------+-------------+Как видим, индекса нет и количество обработанных строк очень большое. В указанном примере индексы не помогут, т.к. используется LIKE с фильтром справа и слева. Однако в большинстве случаев, проблема всегда связана с отсутствием индексов .