EXPLAIN в Mysql
Для анализа медленных запросов в 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** | | +----+-------------+-------+-------+---------------+-------+---------+-------+------+-------+
## Значение в колонке rows = 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 с фильтром справа и слева.
Однако в большинстве случаев, проблема всегда связана с отсутствием индексов.
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: