explain执行计划

一、联合 show warnings使用 

            在explain语句后使用,可打印优化器优化后的sql语句

二、explain列

            id列:要执行的sql语句数量,id值越大优先级越高

            select_type列:为简单查询还说复杂查询

                    1.SIMPLE:简单查询,不包括子查询

                    2.PRIMARY:复杂查询外层查询

                    3.DEPENDENT SUBQUERY:复杂查找中子查询,不在from中

                    4.DERIVED:复杂查询中子查询,在from中 

                    5.UNION:使用union或者union all查询后,union后的查询 ;

                                union和union all区别:union会合并相同结果           

                 注: set session optimizer_switch='derived_merge=on';开启衍生表的合并优化,mysql5.7之后默认开启

                          set session optimizer_switch='derived_merge=off';关闭衍生表的合并优化

              table列:    表示访问的表名。若为<derivedN>表示临时表,依赖于id=N的表查询

              type列:表示关联类型和访问类型,即sql访问级别

                                访问级别性能从高到低为:system-->const-->eq_ref-->ref-->range-->index-->all

                                若级别在range之后则考虑sql优化

                                若为NULL则表示不访问表或者索引

                        system,const:表中只有一条匹配记录

                        eq_ref:使用主键或唯一索引连接查询最多返回一条匹配记录

                        ref:不使用主键或者唯一索引连接查询,使用普通索引查询

                        range:出现在in  between  > < =等查询中,并且使用索引查询

                        index:扫描全索引,一般为扫描二级索引所有叶子节点

                        all:扫描全表,一般为扫描了聚簇索引所有叶子节点

                 possible_key列: 可能用到的索引

                 key列:实际用到的索引

                 key_len列:使用的索引字节数    

                        1.字符串 char(n):n个字节长度  varcher(n):若为UTF-8,则长度为3n+2 

                         2.数字 tinyint:1字节长度  smallint :2字节长度   int:4字节长度   bigint:8字节长度

                         3.时间类型:date :3字节长度  timestamp :4字节长度  datetime:8字节长度

                         4.若字段可以为null,则要要多1字节存储是否为null

                   ref列:使用索引时用到的列或常量 const为常量,字段名字

                   rows列:预计读取的行数。不为最终读取行数,仅为优化器执行时预计行数

                   Extra列:条件信息

                            1.Using index:使用覆盖索引

                            2.Using where :使用where条件,查询列未被索引覆盖

                            3.Using index condition:使用二级索引,并为范围查询

                            4.Using temporary:需要创建临时表处理查询,考虑用覆盖索引优化

                            5.Using filesort:外部排序,数据少时候使用内存排序,数据大时则使用磁盘排序

                            6.select table optimized away:使用了聚合函数

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容