刷面试题的时候,不知道大家有没有见过MySQL这两个命令:explain和profile(反正我就见过了)..面试
以前虽然知道这两个命令大概什么意思,但一直没有去作笔记。今天发现本身的TODO LIST有这么两个命令,因而打算来学习一番,记录一下~数据库
使用的MySQL的版本为5.6.38缓存
1、explain命令bash
1.1体验explain命令架构
首先咱们来体验一下explain命令是怎么使用的,以及输出的结果是什么:性能
explain select * from table_user ;
复制代码
输出结果:学习
发现很使用起来很简单,只要explain后边跟着SQL语句就完事了(MySQL5.6以前的版本,只容许解释SELECT语句,从 MySQL5.6开始,非SELECT语句也能够被解释了)。优化
1.2为何须要explain命令 咱们不少时候编写完一条SQL语句,每每想知道这条SQL语句执行是否高效。或者说,咱们创建好的索引在这条SQL语句中是否使用到了,就可使用explain命令来分析一下!spa
经过explain命令咱们能够知道如下信息:表的读取顺序,数据读取操做的类型,哪些索引可使用,哪些索引实际使用了,表之间的引用,每张表有多少行被优化器查询等信息。code
// 好了,咱们下面看一下explain出来的结果是怎么看的。
1.3读懂explain命令结果
explain命令输出的结果有10列:id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra
1.3.1id
包含一组数字,表示查询中执行SELECT子句或操做表的顺序。
在id列上也会有几种状况:
若是id相同执行顺序由上至下。
若是id不相同,id的序号会递增,id值越大优先级越高,越先被执行。
(通常有子查询的SQL语句id就会不一样)
1.3.2select_type
表示select查询的类型
select_type属性下有好几种类型:
类型有点多啊,我加粗的是最多见的,起码要看得懂加粗的部分。
复制代码
1.3.3table
该列显示了对应行正在访问哪一个表(有别名就显示别名)。
当from子句中有子查询时,table列是 格式,表示当前查询依赖 id=N的查询,因而先执行 id=N 的查询
1.3.4type
该列称为关联类型或者访问类型,它指明了MySQL决定如何查找表中符合条件的行,同时是咱们判断查询是否高效的重要依据。
如下为常见的取值
1.3.5possible_keys
这一列显示查询可能使用哪些索引来查找
1.3.6key
这一列显示MySQL实际决定使用的索引。若是没有选择索引,键是NULL。
1.3.7key_len
这一列显示了在索引里使用的字节数,当key列的值为 NULL 时,则该列也是 NULL
1.3.8ref
这一列显示了哪些字段或者常量被用来和key配合从表中查询记录出来。
1.3.9rows
这一列显示了估计要找到所需的行而要读取的行数,这个值是个估计值,原则上值越小越好。
1.3.10extra
其余的信息
常见的取值以下:
最后
本来觉得Explain命令是比较难学的,但查找资料看下来,以前只是不知道具体的列和列中下的属性是什么意思而已。常见出现的其实也就那么几个,感受对着每一个属性多看一会,仍是能够能看懂的。
欢迎你们和我一块儿学习交流构建Java云架构,我这边会将近期研发的Java云架构的搭建过程和精髓记录下来,帮助更多有兴趣研发Java高级架构的朋友,你们来一块儿探讨Java高级架构的搭建过程及如何运用于企业项目。
我本人邀约各大BATJ架构大牛共创Java高级架构交流社区群,(群号:673043639)致力于免费提供Java架构行业交流平台,经过这个平台让你们相互学习成长,提升技术,让本身的水平进阶一个档次,成功通往Java架构技术大牛或架构师发展。
但愿此文能帮到你们的同时,也听听你们的观点。欢迎留言讨论,加关注,分享你的高见!持续更新!
To-陌霖Java架构
分享互联网最新文章 关注互联网最新发展