Spec-Zone.ru › MySQL 5.7

13.8.2 Выражение EXPLAIN

{EXPLAIN | DESCRIBE | DESC}
    tbl_name [col_name | wild]

{EXPLAIN | DESCRIBE | DESC}
    [explain_type]
    {explainable_stmt | FOR CONNECTION connection_id}

explain_type: {
    EXTENDED
  | PARTITIONS
  | FORMAT = format_name
}

format_name: {
    TRADITIONAL
  | JSON
}

explainable_stmt: {
    SELECT statement
  | DELETE statement
  | INSERT statement
  | REPLACE statement
  | UPDATE statement
}

Выражения DESCRIBE и EXPLAIN являются синонимами. На практике, ключевое слово DESCRIBE чаще используется для получения информации о структуре таблицы, а EXPLAIN — для получения плана выполнения запроса (то есть объяснения того, как MySQL бы выполнил запрос).

В последующем обсуждении используются ключевые слова DESCRIBE и EXPLAIN в соответствии с этими случаями использования, но парсер MySQL рассматривает их как полностью синонимичные.

  • Получение информации о структуре таблицы

  • Получение информации о плане выполнения

Получение информации о структуре таблицы

DESCRIBE предоставляет информацию о столбцах в таблице:

mysql> DESCRIBE City;
+------------+----------+------+-----+---------+----------------+
| Field      | Type     | Null | Key | Default | Extra          |
+------------+----------+------+-----+---------+----------------+
| Id         | int(11)  | NO   | PRI | NULL    | auto_increment |
| Name       | char(35) | NO   |     |         |                |
| Country    | char(3)  | NO   | UNI |         |                |
| District   | char(20) | YES  | MUL |         |                |
| Population | int(11)  | NO   |     | 0       |                |
+------------+----------+------+-----+---------+----------------+

DESCRIBE является сокращением для SHOW COLUMNS. Эти выражения также отображают информацию для представлений. Описание для SHOW COLUMNS предоставляет больше информации о столбцах вывода. См. Раздел 13.7.5.5, «Выражение SHOW COLUMNS».

По умолчанию, DESCRIBE отображает информацию обо всех столбцах в таблице. col_name, если указано, — это имя столбца в таблице. В этом случае выражение отображает информацию только для указанного столбца. wild, если указано, — это строка-шаблон. Она может содержать SQL % и _ символы подстановки. В этом случае выражение отображает вывод только для столбцов с именами, соответствующими строке. Нет необходимости заключать строку в кавычки, если она не содержит пробелы или другие специальные символы.

Выражение DESCRIBE предоставлено для совместимости с Oracle.

Выражения SHOW CREATE TABLE, SHOW TABLE STATUS и SHOW INDEX также предоставляют информацию о таблицах. См. Раздел 13.7.5, «Выражения SHOW».

Получение информации о плане выполнения

Выражение EXPLAIN предоставляет информацию о том, как MySQL выполняет выражения:

  • EXPLAIN работает с выражениями SELECT, DELETE, INSERT, REPLACE и UPDATE.

  • При использовании EXPLAIN с выражением, допускающим объяснение, MySQL отображает информацию из оптимизатора о плане выполнения выражения. То есть, MySQL объясняет, как бы он обработал выражение, включая информацию о том, как таблицы соединяются и в каком порядке. Для получения информации об использовании EXPLAIN для получения информации о плане выполнения см. Раздел 8.8.2, «Формат вывода EXPLAIN».

  • При использовании EXPLAIN с FOR CONNECTION connection_id вместо выражения, допускающего объяснение, отображается план выполнения для выражения, выполняемого в указанном соединении. См. Раздел 8.8.4, «Получение информации о плане выполнения для указанного соединения».

  • Для выражений SELECT, EXPLAIN производит дополнительную информацию о плане выполнения, которая может быть отображена с помощью SHOW WARNINGS. См. Раздел 8.8.3, «Расширенный формат вывода EXPLAIN».

    Примечание

    В более старых версиях MySQL расширенная информация получалась с помощью EXPLAIN EXTENDED. Этот синтаксис по-прежнему распознаётся для обратной совместимости, но расширенный вывод теперь включён по умолчанию, поэтому ключевое слово EXTENDED излишне и устарело. Его использование приводит к предупреждению, и оно удалено из синтаксиса EXPLAIN в MySQL 8.0.

  • EXPLAIN полезно для изучения запросов, включающих разнесённые таблицы. См. Раздел 22.3.5, «Получение информации о разбиениях».

    Примечание

    В более старых версиях MySQL информация о разбиениях получалась с помощью EXPLAIN PARTITIONS. Этот синтаксис по-прежнему распознаётся для обратной совместимости, но вывод о разбиениях теперь включён по умолчанию, поэтому ключевое слово PARTITIONS излишне и устарело. Его использование приводит к предупреждению, и оно удалено из синтаксиса EXPLAIN в MySQL 8.0.

  • Параметр FORMAT может быть использован для выбора формата вывода. TRADITIONAL представляет вывод в табличном формате. Это значение по умолчанию, если не указан параметр FORMAT. JSON формат отображает информацию в формате JSON.

    Для сложных выражений JSON-вывод может быть достаточно большим; в частности, при чтении может быть сложно сопоставить закрывающую и открывающую скобки; для того, чтобы заставить ключ JSON-структуры (если он есть) повторяться вблизи закрывающей скобки, установите end_markers_in_json=ON. Следует понимать, что хотя это упрощает чтение вывода, это также делает JSON недействительным, заставляя JSON-функции генерировать ошибку.

Для выполнения EXPLAIN требуются те же привилегии, что и для выполнения объясняемого выражения. Кроме того, EXPLAIN также требует привилегии SHOW VIEW для любого объясняемого представления.

С помощью EXPLAIN можно увидеть, где следует добавить индексы в таблицы, чтобы выражение выполнялось быстрее, используя индексы для поиска строк. Вы также можете использовать EXPLAIN для проверки того, объединяет ли оптимизатор таблицы в оптимальном порядке. Чтобы дать подсказку оптимизатору, чтобы использовать порядок соединения, соответствующий порядку имен таблиц в выражении SELECT, начните выражение с SELECT STRAIGHT_JOIN вместо просто SELECT. (См. Раздел 13.2.9, «Выражение SELECT».)

Трек оптимизатора иногда может предоставлять информацию, дополняющую ту, что даёт EXPLAIN. Однако, формат и содержимое трека оптимизатора могут меняться между версиями. Для получения подробностей см. Раздел 8.15, «Отслеживание оптимизатора».

Если у вас есть проблема с тем, что индексы не используются, когда вы считаете, что они должны использоваться, выполните ANALYZE TABLE для обновления статистики таблицы, такой как мощность ключей, которая может повлиять на выбор, сделанный оптимизатором. См. Раздел 13.7.2.1, «Выражение ANALYZE TABLE».

Примечание

MySQL Workbench имеет функцию Visual Explain, которая предоставляет визуальное представление вывода EXPLAIN. См. .

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/explain.html

Spec-Zone.ru

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