zoukankan      html  css  js  c++  java
  • Mysql笔记-执行计划explain

    mysql中的explain命令可以查看sql语句是否使用了索引,用了什么索引,有没有全表扫描,帮助我们优化查询语句

    explain出来的信息有10列,主要介绍type、key、Extra这几个字段

    查看索引: SHOW INDEX FROM 表名 

    key:

    sql语句实际执行时使用的索引列,有时候mysql可能会选择优化效果不是最好的索引,这时我们可以在select语句中使用  force index(indexName) 强制mysql使用指定索引,或使用 ignore index(indexName) 强制mysql忽略指定索引

     

    key_length:

    通过该列可以计算出使用到的索引占得字节数。在不适用精度的情况下长度越小越好

    type:

    访问类型,表示数据库引擎查找表的方式,常见的type类型如下:

    all:全表扫描,效率最低

    EXPLAIN select * from user_info;
    EXPLAIN select email from user_info; -- email未加索引

    index:全索引扫描,表示sql语句将会把整颗二级索引树全部扫描一遍,效率比all高一些。一般SELECT子句中查询字段为索引字段,且无WHERE子句时,type会为index。如下:

    EXPLAIN select ID from user_info;

    range:部分索引扫描,当查询为区间查询,且WHERE子句中查询字段为索引字段时,type为range

    EXPLAIN select * from user_info where id>11;

    ref:where子句中,操作符为‘=’,且where字段为非唯一索引的单表查询或联表查询

    EXPLAIN select * from order_master where userid=2 --userid是非唯一索引

    eq_ref:where子句中,操作符为‘=’,且where字段为唯一索引的联表查询

    EXPLAIN select * from user_info u,order_master o where u.id=o.userid 

    const:where子句中,操作符为‘=’,且字段为唯一索引的单表查询,此时最多会匹配的一行

    EXPLAIN select * from user_info where id=2;

    综上,单从type字段考虑效率,const > ref_eq > ref > range > index > all

    但是,我们不能仅根据type去判断两条sql的执行速度,例如type是range的查询不一定比type是index的全表查询速度快,因为type是index时不需要回表查询,而type是range时,有可能需要回表查询

    Extra:额外信息

    extra列会包含一些十分重要的信息,我们可以根据这些信息进行sql优化

    using index:sql没有where子句,使用覆盖索引,不需要回表查询即可拿到结果

    using where:需要回表查询且没有使用到下推索引

    using index && using where:sql语句有where查询条件,且使用覆盖索引,不需要回表查询即可拿到结果

    using index condition:需要回表查询

    using index condition && using where:需要回表查询

    using filesort:语句中存在order by,无法利用索引排序,消耗性能

    using temporary:建立了临时表来保存中间结果,查询完成之后又要把临时表删除,会影响性能,需尽快优化(常见于排序order by、分组查询group by)

    impossible hwere:where子句的值总是false,永远查不到数据,逻辑问题尽快修改

     rows:

    根据表统计信息及索引选用情况,大致估算出找到所需记录,需要读取的行数,越小越好

  • 相关阅读:
    PHP小技巧
    PHP Ajax跨域解决
    单点登录
    Linux 常用命令
    php面向对象--继承
    vueDemo
    vueSource
    vuex
    Vue.js
    关于前后端分离
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/13157453.html
Copyright © 2011-2022 走看看