没有合适的资源?快使用搜索试试~ 我知道了~
SQL中的EXPLAIN 语句
资源推荐
资源详情
资源评论
SQL中的EXPLAIN 语句
EXPLAIN 语句在数据库查询中扮演着非常重要的角色,尤其是在优化查询性能时。它不
是一个直接返回数据给用户的语句,而是用于提供关于 MySQL、PostgreSQL、SQLite、
SQL Server 等多种数据库管理系统(DBMS)如何执行一个 SQL 查询的详细信息。通过
使用 EXPLAIN,数据库管理员或开发者可以了解到 SQL 查询的执行计划,包括如何连
接表、是否使用了索引、数据读取的顺序等。
{EXPLAIN | DESCRIBE | DESC}
tbl_name
[
col_name
|
wild
]
{EXPLAIN | DESCRIBE | DESC}
[
explain_type
] [INTO
variable
]
{[
schema_spec
]
explainable_stmt
| FOR CONNECTION
connection_id
}
{EXPLAIN | DESCRIBE | DESC} ANALYZE [FORMAT = TREE] [
schema_spec
]
select_statement
{EXPLAIN | DESCRIBE | DESC} ANALYZE FORMAT = JSON INTO
variable
[
schema_spec
]
select_statement
explain_type
: {
FORMAT =
format_name
}
format_name
: {
TRADITIONAL
| JSON
| TREE
}
explainable_stmt
: {
SELECT statement
| TABLE statement
| DELETE statement
| INSERT statement
| REPLACE statement
| UPDATE statement
}
schema_spec
:
FOR {SCHEMA | DATABASE}
schema_name
DESCRIBE和EXPLAIN语句是同义词。在实践中,DESCRIBE关键字更常用于获取有关表结
构的信息,而EXPLAIN用于获取查询执行计划(即MySQL将如何执行查询的解释)。
以下讨论根据这些用法使用DESCRIBE和EXPLAIN关键字,但MySQL解析器将它们视为完全
同义的。
1 获取表结构信息
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的描
述提供了有关输出列的更多信息。
默认情况下,DESCRIBE显示表中所有列的信息。col_name(如果给定)是表中列的名
称。在这种情况下,语句仅显示指定列的信息。wild(如果给出)是一个模式字符串。
它可以包含SQL%和_通配符。在这种情况下,语句仅显示名称与字符串匹配的列的输
出。除非字符串包含空格或其他特殊字符,否则不需要将其括在引号内。
DESCRIBE语句是为了与Oracle兼容而提供的。
当用于获取表列的信息时,explain_format系统变量对explain的输出没有影响。
2 获取执行计划信息
EXPLAIN语句提供有关MySQL如何执行语句的信息:
⚫ EXPLAIN适用于SELECT、DELETE、INSERT、REPLACE、UPDATE和TABLE语句。
⚫ 当EXPLAIN与可解释语句一起使用时,MySQL会显示优化器提供的关于语句执行计划
的信息。也就是说,MySQL解释了它将如何处理语句,包括有关表如何连接以及连
接顺序的信息。
⚫ 当EXPLAIN与FOR CONNECTION CONNECTION_id而不是可解释语句一起使用时,它会
显示在指定连接中执行的语句的执行计划。
⚫ 对于可解释的语句,EXPLAIN会生成额外的执行计划信息,这些信息可以使用SHOW
WARNINGS显示。
⚫ EXPLAIN对于检查涉及分区表的查询非常有用。
⚫ FORMAT选项可用于选择输出格式。TRADITIONAL以表格形式呈现输出。如果没有
FORMAT选项,则这是默认值。JSON格式以JSON格式显示信息。TREE提供了比传统格
式更精确的查询处理描述的树状输出;它是显示哈希连接使用情况的唯一格式,并
且始终用于解释分析。
在MySQL 9.0中,EXPLAIN使用的默认输出格式(即当它没有format选项时)由
EXPLAIN_format系统变量的值决定。
MySQL 9.0支持一个附加的INTO选项,其EXPLAIN FORMAT=JSON,可以将JSON格式的输出
保存到用户变量中,如下所示:
mysql> EXPLAIN FORMAT=JSON INTO
@myselect
-> SELECT name FROM a WHERE id = 2;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT
@myselect
\G
*************************** 1. row ***************************
@myex: {
"query_block": {
"select_id": 1,
"cost_info": {
"query_cost": "1.00"
},
"table": {
"table_name": "a",
"access_type": "const",
"possible_keys": [
"PRIMARY"
],
"key": "PRIMARY",
"used_key_parts": [
"id"
],
"key_length": "4",
"ref": [
"const"
],
"rows_examined_per_scan": 1,
"rows_produced_per_join": 1,
"filtered": "100.00",
"cost_info": {
"read_cost": "0.00",
"eval_cost": "0.10",
剩余17页未读,继续阅读
资源评论
icysmile131
- 粉丝: 4625
- 资源: 632
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功