Java知识点大全技术干货基础知识

面试前必须知道的MySQL命令【explain】

2018-12-06  本文已影响54人  Java3y

前言

只有光头才能变强

刷面试题的时候,不知道你们有没有见过MySQL这两个命令:explainprofile(反正我就见过了)..

之前虽然知道这两个命令大概什么意思,但一直没有去做笔记。今天发现自己的TODO LIST有这么两个命令,于是打算来学习一番,记录一下~

使用的MySQL的版本为5.6.38

MySQL版本

一、explain命令

1.1体验explain命令

首先我们来体验一下explain命令是怎么使用的,以及输出的结果是什么:


explain select * from table_user ;

输出结果:

体验explain命令

发现很使用起来很简单,只要explain后边跟着SQL语句就完事了(MySQL5.6之前的版本,只允许解释SELECT语句,从 MySQL5.6开始,非SELECT语句也可以被解释了)。

1.2为什么需要explain命令

我们很多时候编写完一条SQL语句,往往想知道这条SQL语句执行是否高效。或者说,我们建立好的索引在这条SQL语句中是否使用到了,就可以使用explain命令来分析一下!

通过explain命令我们可以知道以下信息:表的读取顺序,数据读取操作的类型,哪些索引可以使用,哪些索引实际使用了,表之间的引用,每张表有多少行被优化器查询等信息。

// 好了,我们下面看一下explain出来的结果是怎么看的。

1.3读懂explain命令结果

explain命令输出的结果有10列:id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra

1.3.1id

包含一组数字,表示查询中执行SELECT子句或操作表的顺序

在id列上也会有几种情况:

explain一下拥有子查询的SQL

1.3.2select_type

表示select查询的类型

select_type属性下有好几种类型:

类型有点多啊,我加粗的是最常见的,起码要看得懂加粗的部分。

1.3.3table

该列显示了对应行正在访问哪个表(有别名就显示别名)。

当from子句中有子查询时,table列是 <derivenN>格式,表示当前查询依赖 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命令是比较难学的,但查找资料看下来,之前只是不知道具体的列和列中下的属性是什么意思而已。常见出现的其实也就那么几个,感觉对着每个属性多看一会,还是可以能看懂的。

当然了,在《高性能MySQL》中也有复杂的SQL语句来分析(但我认为我们一般不会写到那么复杂)..

这篇文章也借鉴了很多其他优秀的博客,如果大家有兴趣的话可以去阅读一下:

如果你觉得我写得还不错,了解一下:

帅的人都关注了
上一篇 下一篇

猜你喜欢

热点阅读