mysql explain 命令讲解
explian命令可以显示select语句的执行计划
explain的结果中每行对应select语句中的一个表,输出结果中的顺序是按照语句处理表的顺序。 mysql使用嵌套循环来处理所有的join连接。 当使用了关键字extended后,explain可以查看到"show warnings"语句的内容,以及被过滤的列。
关键字"extented"和"partitions"不能一起使用,在5.6.5之后,这两个关键字都不可以和"format"一起使用。
mysql> explain select * from emp ,dept where emp.deptno=dept.deptno;
+----+-------------+-------+--------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+---------------+------+---------+------+------+-------+
| 1 | SIMPLE | emp | system | NULL | NULL | NULL | NULL | 1 | |
| 1 | SIMPLE | dept | system | NULL | NULL | NULL | NULL | 1 | |
+----+-------------+-------+--------+---------------+------+---------+------+------+-------+
2 rows in set (0.00 sec) mysql> explain select * from dept,emp where emp.deptno=dept.deptno;
+----+-------------+-------+--------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+---------------+------+---------+------+------+-------+
| 1 | SIMPLE | dept | system | NULL | NULL | NULL | NULL | 1 | |
| 1 | SIMPLE | emp | system | NULL | NULL | NULL | NULL | 1 | |
+----+-------------+-------+--------+---------------+------+---------+------+------+-------+
2 rows in set (0.00 sec) mysql> explain select * from (select * from ( select * from emp where id=1) a) b;
+----+-------------+------------+--------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+--------+---------------+------+---------+------+------+-------+
| 1 | PRIMARY | <derived2> | system | NULL | NULL | NULL | NULL | 1 | |
| 2 | DERIVED | <derived3> | system | NULL | NULL | NULL | NULL | 1 | |
| 3 | DERIVED | emp | system | NULL | NULL | NULL | NULL | 1 | |
+----+-------------+------------+--------+---------------+------+---------+------+------+-------+
3 rows in set (0.01 sec) mysql>
1.id (JSON name: select_id)
select标识符,在查询中该值是顺序的数字。如果该行是其它行union的结果,该值可以为null。
2.select_type (JSON name: none)
select_type的取值列表
| 取值 | json name | 说明 |
| simple | 简单的select查询(没有union、没有子查询) | |
| primary | 最外层的查询 | |
| union | union中的第二个或后面的select语句 | |
| dependent union | dependent (true) | union中的第二个或后面的select语句,对外查询有依赖 |
| union result | union_result | union的结果集 |
| subquery | 子查询中的第一个查询 | |
| dependent subquery | dependent (true) | 子查询中的第一个查询,对外层查询有依赖 |
| derived | 派生表的select(from子句的子查询) | |
| materialized | materialized_from_subquery | 物化的子查询 |
| uncacheable subquery | cacheable (false) | 结果不能被缓存的子查询,外层查询需要使用的时候都要重新执行一次 |
| uncacheable union | cacheable (false) | union中的第二个或者后面的不能被缓存的子查询 |
3.table (JSON name: table_name)
<unionM,N>:表示是M行和N行结果的union;<derivedN>:表示派生自N行的结果;<subqueryN>: 引用N行的物化的子查询
4.partitions (JSON name: partitions)
查询涉及的分区
5.type (JSON name: access_type)
join的类型
6.possible_keys
possible_keys列指出MySQL可以使用的索引。注意,该列完全独立于EXPLAIN输出所示的表的次序。这意味着在possible_keys中的某些键实际上不能按生成的表次序使用。
如果该列是NULL,则没有相关的索引。在这种情况下,可以通过检查WHERE子句看是否它引用某些列或适合索引的列来提高你的查询性能。如果是这样,创造一个适当的索引并且再次用EXPLAIN检查查询
7.key (JSON name: key)
显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL。
要想强制MySQL使用或不使用possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。
8.key_len (JSON name: key_length)
key_len列显示MySQL决定使用的键长度。如果键是NULL,则长度为NULL。 使用的索引的长度。在不损失精确性的情况下,长度越短越好
9.ref (JSON name: ref)
ref列显示使用哪个列或常数与key一起从表中选择行。
10.rows (JSON name: rows)
rows列显示MySQL认为它执行查询时必须检查的行数。
11.filtered (JSON name: filtered)
表的行数的过滤的百分比
12. Extra
包含MySQL执行查询使用的其它信息:
看到 Using filesort 和 Using temporary 的时候,查询就需要优化了。
mysql explain 命令讲解的更多相关文章
- 转载:MySQL EXPLAIN 命令详解学习
转载自:https://blog.csdn.net/mchdba/article/details/9190771 MySQL EXPLAIN 命令详解 MySQL的EXPLAIN命令用于SQL语句的查 ...
- MySQL EXPLAIN 命令详解
MySQL EXPLAIN 命令详解 MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP).这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的.这条命令并没有提 ...
- MySQL EXPLAIN 命令: 查看查询执行计划
MySQL 的 EXPLAIN 命令可以查看SELECT语句的执行的计划,是 MySQL 查询优化的必备工具. 通过执行计划可以了解查询方式.索引使用情况.需要扫描的数据量以及是否需要临时表或排序操作 ...
- 2.mysql explain命令详解
EXPLAIN详解 SQL编写和解析 编写过程 select-distinct-from-join-on-where-group by-having-order by-limit- 解析过程 from ...
- mysql explain 命令简解
参考官方文档地址: http://dev.mysql.com/doc/refman/5.7/en/explain.html 为什么用explain . 如果你的页面返回结果很慢,你就需要使用expla ...
- MySQL Explain命令详解--表的读取顺序,数据读取操作的类型等
表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的) 不损失精确 ...
- mysql explain 命令解释
转载http://bzyyc.happy.blog.163.com/blog/static/6143064720115102551554/ key实 际使用的索引.如果为NULL,则没有使用索引.很少 ...
- MySQL EXPLAIN 命令详解学习
http://blog.csdn.net/mchdba/article/details/9190771
- (转)mysql explain详解
原文:http://www.cnblogs.com/xuanzhi201111/p/4175635.html http://yutonger.com/18.html http://www.jiansh ...
随机推荐
- 【IOS笔记】View Programming Guide for iOS -1
原文:View Programming Guide for iOS View and Window Architecture Views and windows present your applic ...
- OmniThreadLibrary 3.03b发布了
虽然版本号升的不大,但这也是一个重要的版本.作者发现了一个长期存在的bug,就是建立一个线程,如果不指定线程的优先级则默认设置为idle.(正确的应是Normal) 看一下具体的改动情况: 新功能: ...
- spark之combineByKey
combineByKey def combineByKey[C](createCombiner: (V) => C, mergeValue: (C, V) => C, mergeCombi ...
- phpstorm9 无法输入中文逗号句号等符号了,怎么破?
最近手贱把phpstorm 升级到了最新版,发现输入中文符号输入不了呀,全部都变成英文符号了,例如输入的逗号.句号(,.)等都被转换成了(,.) 经过各方搜索,这个在官方也说了,是个bug,JDK的b ...
- ngios
一.Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报 ...
- C++控制程序只运行一个实例
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { ...
- 用户交互与while循环<代码>
#用户交互1 age_oldboy = 56 guess_age = int(input(">>:")) if guess_age == age_oldboy: pri ...
- c# ini file
ini文件主要用于保存配置.之前一直以为是当作普通文本进行操作,读取里面的内容,再自己解析读取的文本.后来发现已经有写好的api函数:WritePrivateProfileString()和GetPr ...
- table表格某一td内容太多导致样式混乱的解决方案
对于有很多条目的数据,通常采用table元素来快速实现,某一个td的内容太多的话就会导致样式混乱难看. 解决方案 要让table的宽度固定可以给table元素设置table-layout:fixed; ...
- iOS WIFI
一.公共WIFI综述 现在很多公司都在做免费WIFI,车站.公交.地铁.餐厅,只要是人员密集流动的地方就有WIFI,免费WIFI从最初的网页认证方式也逐渐向客户端认证方式偏移.本文主要讨论iOS认证上 ...