Сышышь ты, выходи сюда,
поговорим !

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 с фильтром справа и слева. Однако в большинстве случаев, проблема всегда связана с отсутствием индексов .

rss