赞
踩
1)执行计划,简单的来说,是SQL在数据库中执行时的表现情况,通常用于SQL性能分析,优化等场景。在MySQL中使用 explain 关键字来查看。 2)如下所示:运行下面面的sql语句后你会看到,下面的表头信息: id | table | type | possible_keys | key | key_len | ref | rows | Extra |
————————————————————————
————————————————————————
————————————————————————
3)计划分为了3类: (1)常规执行计划语法: explain select * from user; (2)扩展执行计划的语法: explain 的extended 扩展能够在原本explain的基础上额外的提供一些查询优化的信息, 如 explain extended select * from user; (3)分区表的执行计划语法: 如 explain partitions select * from user; |
id不同情况 | 执行顺序 |
id相同 | 执行顺序由上至下 |
id不同 | 值越大优先级越高,越先被执行 |
id为null | 表示一个结果集,不需要使用它查询,常出现在包含union等查询语句中 |
————————————————————————
————————————————————————
1)如果查询使用了别名,那么这里显示的是别名,如果不涉及对数据表的操作,那么这显示为null,如果显示为尖括号括起来的就表示这个是临时表,后边的N就是执行计划中的id,表示结果来自于这个查询产生。如果是尖括号括起来的<union M,N>,与类似,也是一个临时表,表示这个结果来自于union查询的id为M,N的结果集。 |
————————————————————————
————————————————————————
1)性能从好到差依次为:system,const,eq_ref,ref,fulltext,ref_or_null,unique_subquery,index_subquery,range,index_merge,index,ALL,除了ALL之外,其他的type都可以使用到索引,除了index_merge之外,其他的type只可以用到一个索引。 所以,如果通过执行计划发现某张表的查询语句的type显示为ALL,那就要考虑添加索引,或者更换查询方式,使用索引进行查询。 |
1)注意不一定会使用。查询涉及到的字段上若存在索引,则该索引将被列出来。当该列为 NULL时就要考虑当前的SQL是否需要优化了。 |
1)显示MySQL在查询中实际使用的索引,若没有使用索引,显示为NULL。 TIPS:查询中若使用了覆盖索引(覆盖索引:索引的数据覆盖了需要查询的所有数据),则该索引仅出现在key列表中。select_type为index_merge时,这里可能出现两个以上的索引,其他的select_type这里只会出现一个。 |
1)char()、varchar()索引长度的计算公式: (Character Set:utf8mb4=4,utf8=3,gbk=2,latin1=1) * 列长度 + 1(允许null) + 2(变长列) |
1)表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值,如果是使用的常数等值查询,这里会显示const,如果是连接查询,被驱动表的执行计划这里会显示驱动表的关联字段,如果是条件使用了表达式或者函数,或者条件列发生了内部隐式转换,这里可能显示为func |
1)返回估算的结果集数目,注意这并不是一个准确值。 |
————————————————————————
————————————————————————
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。