Mysql explain命令学习

        在进行mysql语句调优的过程中,一般是会通过慢查询日志来查看查询速度较慢的sql语句,定位到这些sql语句之后,通过explain命令来查看sql语句的执行策略,explain命令可以显示一条sql语句的执行策略。

        对一条语句执行explain以后,通常我们关心的是explain语句中的一些重要字段,它们分别是type,key和extra。通过查看key是否为null以得知这条sql语句是否走了索引,然后根据type和extra的信息来综合分析这条慢sql的慢的原因。

        type:

        type字段表示这条sql语句的执行效率等级,一共有8个等级,如何理解记忆这个等级呢,实际上,可以根据不同type所返回的record(记录)数来把这8个等级分为三档,我把它们分为single record、serveral recoreds和more records。

         single record中,除了system是const的特殊情况外,其他两个级别都是使用了主键或者唯一索引的所有字段去定位了一条唯一的数据,效率高。

        serveral records中,返回的都是若干条数据,从ref到range,理论上来说返回的数据依次增加。      

        最后是more records,index指扫描了整棵索引树,all是走全表。

        通过以上的分类方式可以帮助我们更加深刻地理解记忆type字段。

        extra

        extra字段是表示这条sql中有一些特殊的情况,同样我把它也分为了三档,分别是不好,好,和其他。

         不好的情况对于mysql的性能有一些影响,using filesort表示这条sql没有使用内部索引,使用了文件外部的索引进行排序;using temporary是指在执行过程中产生了中间表,使用group by和order by会有这样的情况发生。

        好的情况:using index表示查询过程中使用了覆盖索引,使用覆盖索引可以直接在索引中定位到查询数据,不用回表,效率极高;using index condition指使用联合索引的过程中,有索引下推的现象,帮助查询过程过滤数据。

        其他情况,using where表示我们使用where做了条件过滤,一般来说没有使用到索引会出现using where;using join buffer表示进行了连表查询,被驱动的表没有使用到索引,会先把数据放在缓存池中,进而进行遍历查询。

        

  

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值