zoukankan      html  css  js  c++  java
  • explain详解

    如下:

    Id: 每个select语句就会有一个对应的Id,值越大,其执行顺序越优先,由上面所示,总共有3个select语句

    select_type:

       primary: 复杂查询最外层的的查询

       DERIVED: 衍生类型,如果from的语句是子查询,则这里就是衍生类型,衍生产生的表  <derived3> 其中的3就代表是顺序为3的语句产生的

      SUBQUERY: select语句中的子查询,不是from后面的

    table:  表名称,衍生表命名<derived n> 其中的3就代表是顺序为n的语句产生的

    Type:  最重要的标识之一,简单可以认为他是标识本次查询的性能体现,sytem>const>eq_ref>ref>range>index>all 越往后,性能越低,sql至少要在range级别

          const 和System:当使用主键或者唯一索引作为查询条件时,因为值是唯一的,就相当于常量

          eq_ref: 唯一索引或者主键用于关联查询,其中索引部分所有的数据都能被关联,如下图:o表中的所有数据cod_order_id在i表中都有一条对应的记录

     ref: 使用非唯一索引

     range: 用到索引范围查询

     index:  查询的字段从索引树中直接可以获取到,不用再回表查询

     ALL:  全表扫描

    possible_keys: sql经过查询优化器优化后,可能使用的索引

    key:   执行sql最终使用的索引

    key_len: 索引的长度,在联合索引中,可以判断哪些索引字段被使用了,长度公式:

     ref: 索引作为条件查询时,用到的是常量值还是字段

     rows: mysql预估要读取或者检测的行数

    Extra: 拥有的值比较多,这里展示几个

       Using index: 用到覆盖索引时,参考 type=index

     Using where : 没有用到索引,到有where 条件语句

     Using index condition:查询的列不完全被索引覆盖,where条件中是一个前导列的范围;

     Using temporary:mysql需要创建一张临时表来处理查询。出现这种情况一般是要进行优化的,首先是想到用索

    引来优化。

    Using filesort:将用外部排序而不是索引排序,数据较小时从内存排序,否则需要在磁盘完成排序。这种情况下一
    般也是要考虑使用索引来优化的。

      尤其是后面这2种一定要优化

     

     优化原则如上所示:

    1. 不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描

    如: select * from employees where date(hire_time) ='2018‐09‐30'; 不走索引

    2.  尽量使用覆盖索引(只访问索引的查询(索引列包含查询列)),减少 select * 语句

    3. mysql在使用不等于(!=或者<>),not in ,not exists 的时候无法使用索引会导致全表扫描 < 小于、 > 大于、 <=、>= 这些,mysql内部优化器会根据检索比例、表大小等多个因素整体评估是否使用索引

    4. is null,is not null 一般情况下也无法使用索引, is null在某些场景是可以使用索引的

    5. 字符串不加单引号索引失效

    6. 少用or或in,用它查询时,mysql不一定使用索引,mysql内部优化器会根据检索比例、表大小等多个因素整体评

    估是否使用索引,详见范围查询优化

     7. 范围查询优化,如果范围太大,也不会走索引(拆分来优化)

     

  • 相关阅读:
    Mac下安装zsh(Oh My ZSH)的shell,替代原有的bash
    Mac下配置环境变量重启后不生效解决(.bash_profile vs .bashrc)(bash/zsh下不加载.bashrc问题解决)
    Mac下配置环境变量(转)
    Jenkins配置Publish Junit test result report(转)
    Mac下配置Java Web开发环境(Mac 10.12)
    Mac下配置idea(Mac 10.12)
    Sublime Text 3安装插件(Mac 10.12)
    Sublime Text 3新建工程
    Mac下快速新建txt文件
    Mac下配置maven和集成到ecclipse(Mac 10.12)
  • 原文地址:https://www.cnblogs.com/yangxiaohui227/p/15761528.html
Copyright © 2011-2022 走看看