当前位置:网站首页>MySQL EXPLAIN 性能分析工具详解
MySQL EXPLAIN 性能分析工具详解
2022-08-03 05:11:00 【张童瑶】
EXPLAIN是干什么用的?
EXPLAIN是MySQL的一个性能分析工具,分析SQL性能,可以知道这个SQL有没有优化的空间,这个SQL目前运行的一个性能级别,用了哪些索引,这就是EXPLAIN的作用。
语法格式
EXPLAIN SELECT * FROM `sys_user`
执行结果
结果字段详解:
结果字段 | 详解 |
---|---|
id | 在多个查询SQL过程中用来查询SQL语句的执行顺序,最大值优先最高 |
select_type | 主要是用于区别查询的类型,1、SIMPLE(简单select查询,查询中不包含子查询或者UNION);2、PRIMARY(只是在有子查询的语句中最外面的SELECT,主查询);3、SUBQUERY(在SELECT或WHERE列表中包含了子查询);4、DERIVED(在FROM列表中包含的子查询被标记为DERIVED(衍生)MySQL会递归执行这些子查询,把结果放在临时表里);5、UNION(若第二个SELECT出现在UNION之后,则被标记为UNION;若UNION包含在FROM字句的子查询中,外层SELECT将被标记为DERIVED);6、UNION RESULT(从UNION表获取结果的SELECT) |
table | 显示这一行的数据是关于哪张表的 |
partitions | 分区,暂时不用,感兴趣可以了解一下 |
type | 显示使用了性能级别(重要) ;级别从最好到最差以此顺序为:system>const>eq_ref>ref>range>index>ALL,一般来说,得保证查询达到range级别,最好能达到ref;1、system:表仅有一行(=系统表),这是const联接类型的一个特例;2、const:表最多有一个匹配行,它将在在巡开始时被读取。因为仅有一行,const表很快,因为它们只读取以一次(作者大白话:其实就是速度很快,很难达到这个级别);3、eq_ref:唯一性索引扫描,对于每个索引建,表中只有一条记录与匹配。常见于主键或唯一索引扫描(作者大白话:性能仅次于const,基本上也不用优化);4、ref:非唯一性索引扫描,返回匹配某个单独值的所有行,本质上也是一种索引访问,它返回所有匹配某个单独值的行,然而他可能会找到多个符合条件的行,所以他应该属于查找和扫描的混合体(作者大白话:就是非唯一性索引);5、range:只检索给定范围的行,使用一个索引来选择行,key列显示使用了哪个索引一般就是在你的where语句中出现了between、<、>、in等的查询这种范围扫描索引扫描比全表扫描要好,因为它只需要开始于索引的某一点,而结束于另一点,不用扫描全部索引;6、index:通常比ALL快,就是遍历索引,就是用了索引会出现这个级别(作者批注:其实你的SQL达到这个index级别就已经很不错了);7、ALL:全表扫描,也是最慢的 |
possible_keys | 这行SQL可能用到的索引 |
key | 这行SQL实际用的索引 |
key_len | 索引的长度,数值越小越好 |
ref | 显示那个索引列被使用了 |
rows | 表查询数据 |
filtered | 显示出来的行,根索引条数的一个百分比 |
Extra | 1、Using filesort:文件排序,需要对SQL优化;2、Using temporary:产生临时表,厂家于排序order by 和分组查询group by,需要考虑一下优化了;3、Using index:效率不错,无需优化 |
祝大家都能成为SQL优化大神
ok,我话说完
我的其他文章
我的网站
边栏推荐
猜你喜欢
随机推荐
0.ROS常用命令
Pr第三次培训笔记
【数组排序】+日常
力扣561. 数组拆分
VSO Downloader Ultimate 5.0.1.45 中文多语免费版 在线视频下载工具
1069 微博转发抽奖 (20 分)(C语言)
Pr第四次培训笔记
信息编码、存储压缩与密码学
1054 求平均值 (20 分)
js implements a bind function
1058 选择题 (20 分)(C语言)
私有变量(private) 【详细+易懂】
Lambda表达式案例
高可用 两地三中心
1059 C语言竞赛 (20 分)(C语言)
阿里云对象存储oss私有桶生成链接
Gradle的安装配置
求因子数量
【特征选取】计算数据点曲率
7.18(7)