要精通SQL优化?首先要看懂explain关键字( 二 )

要精通SQL优化?首先要看懂explain关键字

文章插图
 

要精通SQL优化?首先要看懂explain关键字

文章插图
 
eq_refprimary key 或 unique key 索引的所有部分被连接使用 ,最多只会返回一条符合条件的记录,所以这种类型常出现在多表的join查询 。
要精通SQL优化?首先要看懂explain关键字

文章插图
 
ref相比eq_ref,不使用唯一索引,而是使用普通索引或者唯一性索引的部分前缀,可能会找到多个符合条件的行 。
要精通SQL优化?首先要看懂explain关键字

文章插图
 
range使用索引选择行,仅检索给定范围内的行 。一般来说是针对一个有索引的字段,给定范围检索数据,通常出现在where语句中使用 bettween...and、<、>、<=、in 等条件查询。
要精通SQL优化?首先要看懂explain关键字

文章插图
 
index扫描全表索引,通常比ALL要快一些 。
要精通SQL优化?首先要看懂explain关键字

文章插图
 
ALL全表扫描,MySQL遍历全表来找到匹配行,性能最差 。
要精通SQL优化?首先要看懂explain关键字

文章插图
 
六、possible_keys表示在查询中可能使用到的索引来查找,而列出的索引并不一定是最终查询数据所用到的索引 。
七、key跟possible_keys有所区别,key表示查询中实际使用到的索引,若没有使用到索引则显示为NULL 。
八、key_len表示查询用到的索引key的长度(字节数) 。如果单列索引,那么就会把整个索引长度计算进去,如果是联合索引,不是所有的列都用到,那么就只计算实际用到的列,因此可以根据key_len来判断联合索引是否生效 。
九、ref显示了哪些列或常量被用于查找索引列上的值 。常见的值有:const,func,null,字段名 。
十、rowsmysql估算要找到我们所需的记录,需要读取的行数 。可以通过这个数据很直观的显示 SQL 性能的好坏,一般情况下 rows 值越小越好 。
十一、filtered指返回结果的行占需要读到的行(rows列的值)的百分比,一般来说越大越好 。
十二、Extra表示额外的信息 。此字段能够给出让我们深入理解执行计划进一步的细节信息 。
Using index说明在select查询中使用了覆盖索引 。覆盖索引的好处是一条SQL通过索引就可以返回我们需要的数据 。
要精通SQL优化?首先要看懂explain关键字

文章插图
 
Using where查询时没使用到索引,然后通过where条件过滤获取到所需的数据 。
要精通SQL优化?首先要看懂explain关键字

文章插图
 
Using temporary表示在查询时,MySQL需要创建一个临时表来保存结果 。临时表一般会比较影响性能,应该尽量避免 。
要精通SQL优化?首先要看懂explain关键字

文章插图
 
有时候使用DISTINCT去重时也会产生Using temporary 。
要精通SQL优化?首先要看懂explain关键字

文章插图
 
Using filesort我们知道索引除了查询中能起作用外,排序也是能起到作用的,所以当SQL中包含 ORDER BY 操作,而且无法利用索引完成排序操作的时候,MySQL不得不选择相应的排序算法来实现,这时就会出现Using filesort,应该尽量避免使用Using filesort 。
要精通SQL优化?首先要看懂explain关键字

文章插图
 
总结一般优化SQL语句第一步是要知道这条SQL语句有哪些需要优化的,explain执行计划就相当于一面镜子,能把详细的执行情况给开发者列出来 。所以说善用explain执行计划,能解决80%的SQL优化问题 。
explain的信息中,一般我们要关心的是type,看是什么级别,如果是在互联网公司一般需要在range以上的级别,接着关心的是Extra,有没有出现filesort或者using template,一旦出现就要想办法避免,接着再看key使用的是什么索引,还有看filtered筛选比是多少 。
这篇文章就讲到这里了,希望大家看完之后能对SQL优化有更深入的理解,感谢大家的阅读 。
觉得有用就点个赞吧,你的点赞是我创作的最大动力~
我是一个努力让大家记住的程序员 。我们下期再见!!!
能力有限,如果有什么错误或者不当之处,请大家批评指正,一起学习交流!

【要精通SQL优化?首先要看懂explain关键字】


推荐阅读