mysql explain工具使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql explain工具使用相关的知识,希望对你有一定的参考价值。
explain工具可以确认执行计划是否良好,查询是否走了合理的索引。查询的执行计划,随着数据的变化也可能会有变化。调用方式:explain + [sql语句]。
另外,explain是有局限性的:
1. 不会说明触发器、存储过程、自定义函数对查询的影响情况;
2. 不考虑各种Cache情况;
3. 不能显示执行查询时所做的优化工作;
4. 部分信息是估算的,并非精确值;
5. mysql 5.6之前,只能解释select操作,其他操作需要重写为select之才查看执行计划。
6. 如果from里有子查询,explain可能会执行这个子查询。所以,如果有耗资源很大的子查询,使用explain会产生很大的开销。
各列字段的解释,如下:
1. id,一组数字,操作顺序,如果id相同,则执行顺序由上至下。如果是子查询,id的序号会递增,值越大则优先级越高,越先被执行。
2. select_type,表示每个子句的类型,简单还是复杂,取值有如下几种:
a) simple:简单查询,无子查询或union等;
b) primary:查询中若包含任何复杂的子部分,最外层则被标记为primary;
c) subquery:在select或where中若包含子查询,则该子查询被标记为subquery;
d) derived:from中包含子查询,被标记为derived;
e) union:若select出现在union之后,则被标记为union;
f) union result:从union表中获取结果的select将被标记为union result;
3. type,找到所需行的方式,又称访问类型,取值有如下几种,由最差到最好:
a) all:全表扫描。
b) index:遍历索引,全索引扫描。
c) range:索引范围扫描。
d) ref:非唯一性索引扫描,交返回匹配单独值的所有行,常见于使用非唯一性索引或唯一性索引的非唯一前缀进行的查找。
e) eq_ref:唯一性索引扫描。
f) const、system:当mysql对查询的某部分进行优化,并转换为一个常量时。如将主键置于where列表中,mysql就能将该查询转换为一个常量。system是const的特例,当查询的表只有一行的情况下,即可使用system。
4. possible_keys: 指出mysql能使用哪个索引在表中找到行,查询涉及的字段上若存在索引,则该索引将被列出,但不一定会被查询使用到。
5. key:使用到了哪个索引,这里列出的是实际使用到的索引,若没有使用索引,则显示为null。
6. ref:连接匹配条件,即哪些列或常量用于查找索引上的值。
7. rows:找到所需记录,需要读取的行数,越少越好。
8. Extra:不适合在其他列显示,但却十分重要的信息,常见的有如下值:
a) Using index:使用了覆盖索引。
b) Using where:where条件未使用索引。
c) Using temporary:需要使用临时表来存储结果集,常见于排序和分组查询。性能差。
d) Using filesoft:使用了文件排序,性能差。
以上是关于mysql explain工具使用的主要内容,如果未能解决你的问题,请参考以下文章
《MySQL高级篇》七性能分析工具的使用(慢查询日志 | EXPLAIN | SHOW PROFILING | 视图分析 )
《MySQL高级篇》七性能分析工具的使用(慢查询日志 | EXPLAIN | SHOW PROFILING | 视图分析 )