通过Explain分析低效率sql
通过Explain分析低效率sql
Alex#通过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索引