zoukankan      html  css  js  c++  java
  • explain 小小少年

    1.explain用来查看当前sql的执行计划,分析sql的执行效率

    2.explain各字段解释:

    ①.id: 表示查询中执行select子句或者操作表的顺序

      >.id相同,顺序由上而下
      >.id不同,如果是子查询。id序号会递增,序号越大,优先级越高,越先被执行
      >.id相同,可以认为是一组,从上往下顺序执行,在所有组中,id值越大,优先级越高,越先被执行

    ②.select_type:查询类型,用于区别 普通查询、联合查询、子查询等

      >.simple: 简单的select查询,查询中不包含子查询或者union

        >.primary: 查询中包含任何复杂的子部分,最外层的会被标记为primary
        >.subquery: 在select或者where列表中包含子查询
        >.derived: 在from列表中包含了子查询,被标记为derived(衍生),mysql会递归查询这些子查询,把结果放在临时表中
        >.union: 如果第二个select出现在union之后,就别标记为union,如果union包含在from字句的子查询中,外层select被标记为derived
        >.union result: 从union表中获取结果的select
    ③.table:表示执行的sql属于哪张表
    ④.type: 访问类型排列 
      all:全表扫描
      index: full index scan  全索引扫描
      range: 只检索给定范围的行,使用一个索引来选择行,key列显示使用了哪些索引;一般就是在where中出现了between或者 < > in等
      ref: 非唯一性索引扫描,返回匹配某个单独值的所有行,本质上也是一种索引访问,会返回匹配某个值的所有行
      eq_ref: 唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配,常见主键或者唯一索引扫描
      const: 表示通过索引一次就找到了,const用于比较primary_key和union,由于只匹配一条数据,所以很快,
      system: 表中只有一条记录(等于系统表),这是const类型的特例,生产上不常见
     
      从最好到最差的顺序 system > const > eq_ref > ref > range > index > all       
      一般而言,最少要的range或者ref级别
     
    ⑤.possible_keys:显示可能使用到的索引,但是不一定被使用
    ⑥.key:实际使用的索引,如果为null。则表示要么没有建索引,要么建索引了 但是没有使用;如果使用了覆盖索引,则该索引只出现在key中
    ⑦.key_len:表示索引中使用的字节数,可通过该列计算查询中使用的索引长度,长度越短越好
    ⑧.ref:显示索引的哪一列被使用了,如果可能的话,是一个常数,哪些列或常量被用于查找索引列上的值
      如果使用的是常数来作为查询条件,显示的是const
      如果是连接查询,会显示具体的字段。数据库.表.字段
      
    ⑨.row:根据表统计信息以及索引选用情况,大致估算出找到所需的记录所需要读取的行数,该值越小越好
    ⑩.Extra:不适合显示在其他字段但十分重要的额外信息(一个字段,可能会对应多个值)
       using filesort(文件内排序):说明mysql会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。mysql中无法使用索引完成的排序操作叫做 文件排序;出现这个,比较危险
       using temporary:使用了临时表保存中间的结果,mysql在对查询结果排序时使用了临时表,常见于order by排序和分组查询group by;
       using index:表示select操作使用了覆盖索引,避免了访问表的数据行,效果不错;
                          如果同时使用using where,表示索引被用来执行索引键值的查找;
                          如果没有同时出现using  表明索引被用来读取数据,并没有执行查找动作
  • 相关阅读:
    🍖名称空间与作用域
    🍖文件打开模式 "t"
    🍖函数参数
    【转】LINQ中的Aggregate语法
    【转】c#中string.trimstart() 和string.trimend() 的用法
    1094 和为k的连续区间(暴力)
    1095 Anigram单词
    1031 骨牌覆盖 (斐波拉契数列)
    最长公共子序列(模板 LCSL)
    1092 回文字符串(LCSL_DP)
  • 原文地址:https://www.cnblogs.com/mpyn/p/11017720.html
Copyright © 2011-2022 走看看