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вместо выражения, допускающего объяснение, отображается план выполнения для выражения, выполняемого в указанном соединении. См. Раздел 8.8.4, «Получение информации о плане выполнения для указанного соединения».connection_id-
Для выражений
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.