Spec-Zone.ru › MariaDB

ПОКАЗАТЬ ПЛАН ВЫПОЛНЕНИЯ

Синтаксис

SHOW EXPLAIN [FORMAT=JSON] FOR <connection_id>;
EXPLAIN [FORMAT=JSON] FOR CONNECTION <connection_id>;

Описание

Команда SHOW EXPLAIN позволяет получить план выполнения запроса (т.е. описание плана запроса) запроса, выполняющегося в определенном соединении.

SHOW EXPLAIN FOR <connection_id>;

будет производить вывод EXPLAIN для запроса, который выполняется соединением номер connection_id. Идентификатор соединения можно получить с помощью SHOW PROCESSLIST.

SHOW EXPLAIN FOR 1;
+------+-------------+-------+-------+---------------+------+---------+------+---------+-------------+
| id   | select_type | table | type  | possible_keys | key  | key_len | ref  | rows    | Extra       |
+------+-------------+-------+-------+---------------+------+---------+------+---------+-------------+
|    1 | SIMPLE      | tbl   | index | NULL          | a    | 5       | NULL | 1000107 | Using index |
+------+-------------+-------+-------+---------------+------+---------+------+---------+-------------+
1 row in set, 1 warning (0.00 sec)

Вывод всегда сопровождается предупреждением, которое показывает запрос, выполняемый целевым соединением (это показывает, для чего предназначен EXPLAIN):

SHOW WARNINGS;
+-------+------+------------------------+
| Level | Code | Message                |
+-------+------+------------------------+
| Note  | 1003 | select sum(a) from tbl |
+-------+------+------------------------+
1 row in set (0.00 sec)

ПОКАЗАТЬ ПЛАН ВЫПОЛНЕНИЯ ДЛЯ СОЕДИНЕНИЯ

MariaDB начиная с 10.9

Синтаксис EXPLAIN FOR CONNECTION был добавлен для совместимости с MySQL.

FORMAT=JSON

MariaDB начиная с 10.9

SHOW EXPLAIN [FORMAT=JSON] FOR <connection_id> расширяет SHOW EXPLAIN для возврата более подробного JSON-вывода.

Возможные ошибки

Вывод может быть получен только в том случае, если целевое соединение в данный момент выполняет запрос, для которого доступен готовый план выполнения. Если это не так, вывод будет:

SHOW EXPLAIN FOR 2;
ERROR 1932 (HY000): Target is not running an EXPLAINable command

Вы получите эту ошибку, когда:

  • целевое соединение не выполняет команду, для которой можно запустить EXPLAIN
  • целевое соединение выполняет команду, для которой можно запустить EXPLAIN, но
    • еще нет плана выполнения (например, таблицы открыты, и блокировки получены до создания плана выполнения)

Различия между выводом SHOW EXPLAIN и EXPLAIN

Предыстория

В MySQL выполнение EXPLAIN проходит по немного другому пути, чем оптимизация реального запроса (обычно SELECT). Это нежелательно и вызвало ряд ошибок в EXPLAIN. (Например, см. MDEV-326, MDEV-410 и lp:1013343. lp:992942 не напрямую относится к EXPLAIN, но оно также не существовало бы, если бы MySQL не пытался удалить части плана запроса посреди выполнения запроса)

SHOW EXPLAIN исследует выполняющийся запрос SELECT, и, следовательно, его вывод может немного отличаться от того, что выдал бы EXPLAIN SELECT. Мы сделали все возможное, чтобы либо различие было незначительным, либо вывод SHOW EXPLAIN был ближе к реальности, чем вывод EXPLAIN.

Список зафиксированных различий

  • SHOW EXPLAIN может иметь Extra='no matching row in const table', где EXPLAIN выдало бы Extra='Impossible WHERE ...'
  • Для запросов с подзапросами, SHOW EXPLAIN может выводить select_type==PRIMARY, где обычный EXPLAIN раньше выводил select_type==SIMPLE, или наоборот.

Необходимые права

Запуск SHOW EXPLAIN требует тех же прав, что и запуск SHOW PROCESSLIST.

См. также

  • EXPLAIN
  • EXPLAIN ANALYZE, который выполнит запрос и выведет расширенные EXPLAIN результаты.
  • Также возможно сохранить EXPLAIN в журнале медленных запросов.
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется заранее MariaDB. Мнения, информация и мнения, выраженные в этом содержимом, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/show-explain/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API