Explain的使用和介绍
来源:互联网 发布:知乎图片大小 编辑:程序博客网 时间:2024/06/10 15:32
Explain
1、为什么要使用Explain
MySQL的EXPLAIN命令显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。
2、通过Explain可以得到
3、如何调用Explain命令
1、只需要在SELECT前面加上EXPLAIN即可,例如explain select surname,first_name form a,b where a.id=b.id
2、需要在语句结尾(;之前)加上\G能够更清晰的查看
3、需要说的是EXPLAIN只对SELECT查询作解释,INSERT,UPDATE,DELETE不会.
mysql> explain select * from user1;+----+-------------+-------+------+---------------+------+---------+------+------+-------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+-------+------+---------------+------+---------+------+------+-------+| 1 | SIMPLE | user1 | ALL | NULL | NULL | NULL | NULL | 19 | |+----+-------------+-------+------+---------------+------+---------+------+------+-------+1 row in set (0.15 sec)
2、explain列的解释:
1、id:
语句的执行顺序标识,如果在语句中没有子查询或联合,说明只有一个SELECT,于是这个列显示为1,否则内层的SELECT会顺序编号.
2、select_type:
显示了对应的查询是简单还是复杂SELECT,主要有以下几种查询类型
3、table:
4、type :
1)、all
全表扫描,效果是最不理想的。
2)、const
const是在where条件以常量作为查询条件,最多只会有一条记录匹配,由于是常量,实际上只须要读一次。
3)、eq_ref
最多只会有一条匹配结果,一般是通过主键或唯一键索引来访问。一般会出现在连接查询的语句中。
4)、fulltext
进行全文索引检索。
5)、index
全索引扫描。MySQL在扫描表时按索引次序进行而不是行。
6)、index_merge
查询中同时使用两个(或更多)索引,然后对索引结果进行合并(merge),再读取表数据。
7)、index_subquery
子查询中的返回结果字段组合是一个索引(或索引组合),但不是一个主键或唯一索引。
8)、rang
索引范围扫描。一个有限制的索引扫描,它开始于索引里的某一点,返回匹配这个值域的行(显而易见的范围扫描.即带有BETWEEN或在WHERE子句中带有>的查询,当MySQL使用索引去查找一系列值的时候,如IN()和OR列表,也为显示的范围扫描)
9)、ref
也叫索引查找,他返回所有匹配某单个值的行,它可能会找到多个符合条件行。
10)、ref_or_null
与ref的唯一区别就是在使用索引引用的查询之外再增加一个空值的查询。
11)、system
系统表,表中只有一行数据;
12)、unique_subquery
子查询中的返回结果字段组合是主键或唯一约束。
5、possible_keys:
这一列显示了查询可以使用哪些索引,是基于查询访问的列和使用的比较操作符来判断的.如果没有任何索引可以使用,就会显示成null6、key:查询中同时使用两个(或更多)索引,然后对索引结果进行合并(merge),再读取表数据。
6、key
显示了MySQL决定采用哪个索引来优化对该表的访问
7、key_len:
1)、key_len列显示mysql决定使用的键长度,如果键是null,则长度为null。
2)、显示MySQL在索引里使用的字节数.举个例子就是在查询中使用到了主键,而主键的数据类型为INT,则为4,SMALLINT则为2
3)、使用的索引长度,一般越短越好。
8、Ref:
显示了之前的表在key列记录的索引中查询值所用到的列或常量。
9、rows:
显示的是MySQL为了找到所需的值而要读取的行数.
10、extra:
在此显示的是在其他列不适合显示的额外信息,主要可能会是以下内容:
1)、Distinct
查找distinct 值,当mysql找到了第一条匹配的结果时,将停止该值的查询,转为后面其他值查询。
2)、Full scan on NULL key
子查询中的一种优化方式,主要在遇到无法通过索引访问null值的使用。
3)、Using index
MySQL将使用覆盖索引,以避免访问表(就是仅仅使用了索引中信息而没有读取表中)
4)、Using where
意味着MySQL服务器将在存储引擎检索行后在进行过滤(将会通过WHERE条件来筛选存储引擎返回的记录)
5)、Using temporary
意味着MySQL在对查询结果排序时会用到一个临时表.
6)、Using filesort
看到这个的时候,查询就需要优化了。意味着MySQL会对结果使用一个外部索引排序,而不是按索引次序从表里读出来.
- Explain的使用和介绍
- MongoDB 索引和explain的使用
- MYSQL教程:explain使用介绍
- oracle EXPLAIN的使用
- MySQL Explain 的使用
- explain的使用
- MySQL Explain的使用
- MongoDB 索引和explain使用
- 使用Toad的Explain Plan
- 执行计划的使用(EXPLAIN)
- 执行计划的使用(EXPLAIN)
- mysql explain 的使用【整理】
- MySQL explain 方法的使用
- mysql中explain的使用
- mysql中的explain的使用
- 对mysql explain\desc 的介绍
- mysql explain的用法(使用explain优化查询语句)
- 使用explain
- Linux下如何查看系统启动时间和运行时间
- 2016 年度盘点 十大(链接)
- 使用Origin画出复杂网络博弈中合作率时间演化图(学术论文)
- 如何获取Android唯一标识(唯一序列号)
- 知识库--Digester(72)
- Explain的使用和介绍
- 图片动画播放(AnimationDrawable)
- HDU 2063 过山车(匈牙利算法)
- 建立docker私有仓库
- 李炎恢老师PHP第三季视频课程(设计模式+MVC模式+SMARTY+在线商城)
- 启动oracle的三过程
- 《DSAA》 12.2.3 红黑树的自顶向下删除
- Object-C之Bug集中营
- BZOJ 1336&1337最小圆覆盖