explain详解

知识点有可能在pdf里面不全,所以这两个都要看

综上图所述

执行顺序是:id从大到小,若相等就从上往下,id列为null的就表是这是一个结果集,不需要使用它来进行查询。

select_type字段中:

        primary:最外层select

        derived:临时表(from后边的临时表)

        subquery:select后边的临时表

table字段中:代表 表名(包含临时表)

        <derived3>:临时表(代表select_type字段中的derived  3是select_type字段中的derived前面的id)

type字段中:

这一列表表示关联类型和访问类型,即mysql决定如何查找效率中的行,查找数据记录的大概范围。

依次从最优到最差分别为:system>const>eq_ref>range>index>all

一般来说,得保证查询达到range级别,最好达到ref

NULL:mysql能够在优化阶段分解查询语句,在执行阶段用不着再访问表或索引,例如:在索引列中选取最小值,可以单独查找索引完成,不需要在执行时访问表

 

         const:代表常量,相当于这个sql查询速度和查常量(select 1 from dual)一样

        system:代表常量一种,表里只有一条数据匹配

        eq_ref:代表表中的主键或者唯一键和其他表进行关联 如上图

        ref:代表表中的辅助索引与其他表就行关联

        index:扫描全表索引,通常扫描二级索引(优化军规里面没有)

        index关键点:若查出来的数据在主键索引和辅助索引都有,会优先选择辅助索引,因为辅助索引占得空间小的多(子叶节点存放key),而主键索引占得空间大(子叶节点存放所有数据)

这种sql 虽然提示用了索引,但是还是特别慢需要优化,因为在辅助索引子叶节点遍历所有key(这种会涉及很多io,一个页到下一页就会io)

        all:也是用聚簇索引(主键索引)在叶子节点从头往后遍历,非常慢(多次io)

比index慢的原因是叶子节点存放数据,所以io次数更多

show warning 可以查询sql优化阶段情况

extra:额外信息(重要  )

        using where:代表索引失效,进行回表操作

        using index:代表不进行回表操作(称覆盖索引

         using filesort:代表的是 where和orderby连起来是否跨列使用,跨列会出现using filesort,若不跨列就不会出现  (order by是不用索引的) 

                             简单一点总结:运用临时空间进行了排序

        例如上sql1:连起来代表 a1,a2,a3(orderby不适用索引),所以最终用联合索引中的a1a2

        例如上sql2:连起来代表 a1,a3(orderby不适用索引)并且夸列了,所以最终用联合索引中的a1,并且extra会出现using filesort

Using index:使用了覆盖索引(不需要回表)

using index condition:使用了索引下推

possible_keys列有值,key没值这种情况:

因为idx_age可以使用,但是mysql认为不使用索引效果更快 

两表索引调优

谨记:小表驱动大表

 以上两个循环,最终都会循环3000次,但是对于双层循环来说,一般建议,将数据小的循环方外层,数据大的循环放内层,这样效率最快

1、先考虑sql连接方式

若sql是左连接,给左表关联字段添加索引

若sql是右连接,给右表关联字段添加索引

2、考虑where条件,然后对应的单表添加索引

三表优化索引:

1、小表驱动大表

2、索引建立在经常查询的字段上

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值