Mysql中的explain查看执行计划
使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的,分析业务查询语句或是表结构的性能瓶颈。
-
怎么使用?
explain + sql语句。 -
执行计划包含的信息:
id,select_type,table,type,possible_keys,key,key_len,ref,rows,Extra
访问类型,sql查询优化中一个很重要的指标,结果值从好到坏依次是:
重点说下第四个字段的含义:
type:访问类型排列,显示查询使用了哪一种类型,从最好到最差依次是:
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
一般来说,得保证查询到range级别,最好能到ref级别。
参数值解释:
System:表中只有一行记录(等于系统表),这是const类型的特例,平时不会出现,这个可以忽略不计。
Const:表示通过索引一次就找到了,const用于比较primary key或者unique索引。因为只匹配一行数据,所以很快。例如将主键置于where列表中,mysql将该查询转为一个常量。
Eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或唯一索引扫描。
Ref:非唯一性索引扫描,返回匹配某个单独值得所有行。
Range:只检索给定范围的行,使用一个索引来选择行。Key列显示使用了哪个索引,一般就是在你的where语句中出现了between, <, >, in等的查询。这种范围扫描比全表扫描,因为它只需要开始于索引的某一点,而结束于另一点,不用扫描全部索引。
Index:full index scan全索引扫描,index与all的区别为:index类型只遍历索引树,这通常比all快,因为索引文件通常比数据文件小。也就是说虽然index和all都是读全表,但index是从索引中读的,而all是从硬盘中读的。
All:全表扫描,是最慢的类型。




