通过Explain分析低效率sql

#通过explain分析低效率sql

  • 可以通过explain 或 desc 命令获取mysql如何执行select语句的信息。

##解释:

  • select_type : 标示select 的类型

    simple : 简单表,即不适用表连接或子查询
    primary : 主查询,即外层的查询
    union : union中的第二个或者后面的查询语句
    subquery : 子查询中的第一个select等

  • table : 输出结果集的表
  • type : 标示表的连接类型,性能由好到差的连接类型为:

    system : 表中仅有一行,即常量表
    const : 单标中最多有一个匹配行 例如primary key 或者 unique index
    eq_ref : 对于前面的每一行,在此表中查询一条记录,简单来说,就是多表连接中使用primary index 或者unique index
    ref : 与eq_ref类似,区别在于不是使用primary key 或者unique index ,而是使用普通的索引
    ref_or_null : 与ref类似,区别在于条件中包含对null的查询
    index_merge : 索引合并优化
    unique_subquery : in的后面是一个查询主键字段的查询
    index_subquery : 与unique_subquery类似,区别在于in的后面是查询非唯一索引字段的子查询
    rang : 单表中的范围查询
    index : 对于前面的每一行,都通过查询索引来得到数据
    all 对于前面每一行,都通过全表扫描来得到数据

  • possible——keys : 表是查询是,肯能使用的索引
  • key : 标示实际使用的索引
  • key_len : 索引字段的长度
  • rows : 扫描行的数量
  • extra : 执行情况的说明和描述

索引存储分类

  • MyIASM 存储引擎的表的数据和索引是自动分开存储的,给独立一个文件;
  • InnoDB存储引擎的表的数据和索引是在同一个表空间里面,但可以有多个文件组件。
  • mysql中索引的存储类型目前只有(BTREE 和HASH);
  • MyISAM 和InnoDB 都支持BTREE
  • MEMORY/HEAP 存储引擎可以支持HASH和BTREE索引