MySql- Explain
2022/9/13 2:25:46
本文主要是介绍MySql- Explain,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Explain语句可以查看SQL的执行情况,根据执行情况进行优化。
1. id
id查询的标识符,几个查询几个id。NULL表示引用其它行的结果。id越大执行优先级越高
2. select_type
- SIMPLE: 简单查询
- PRIMARY: 最外层查询
- UNION: 使用union时第二个查询和之后的查询的select_type会被标记为UNION
- UNION RESULT
如果是union,最后对结果去除的操作的select_type会被标记为UNION RESULT
如果是union all不存在id为NULL的额外一行,也就不存在select_type为UNION RESULT的行
- SUBQUERY
子查询
- DERIVED
派生, from里的select,并不一定有
3. table
访问哪一个表,从哪一个表里进行查询
4. partitions
当前查询匹配记录的分区,未分区的表返回null
5. type
连接类型,决定了sql的执行速度
-
system:const的特例,
-
const: 针对主键或唯一索引等值查询扫描,最多返回一行数据,
-
eq_ref:
唯一性索引扫描,对于每个索引键表中只有一条记录与之匹配
当使用了索引的全部组成部分,并且索引是PRIMARY 或 UNIQUE NOT NULL时才会使用
-
ref
非唯一性索引扫描,返回匹配某个值的所有行,
通过索引查找结果,但是有多个匹配行
-
range
范围查找,使用索引
-
index
扫描全部索引和ALL相比只从索引读取
-
ALL全表扫描
遍历全表
4. possible_keys,Key
possible_keys查询可能用到的索引,但不一定被使用
Key实际使用的索引
如果Key为Null,则没有使用索引
如果是索引覆盖即通过索引就查询到了相应的值,则possibile为Null,使用的索引在key中
5. key_len
索引使用的字节数,查询中使用的索引最大长度,长度越长精度越高效率越低,长度越短效率越高,但精度越低。是一个预估值
6.ref
where或join中与索引比较的参数,常见的有const(常量),func(函数)、字段名
7. rows, filtered
rows预估需要扫描的行数,越小越好
filtered:符合查询条件的数据百分比,最大为100,
8. Extra
额外信息
-
using where
使用了where但没使用索引,有时候使用了索引也使用了where也有,比如id的例子中,Primary的那个查询中使用了索引也有where。
-
Using index索引覆盖
-
Using filesort 使用外部排序,而不是按照表内的索引顺序读取, 可能需要优化
-
using temporary
使用了临时表
-
using join buffer
join时没有用到索引,使用了连接缓存
-
using index condition
使用索引下推,查询的列有非索引列,但先判断索引条件以减少磁盘io。
实际使用的时lnam的索引但是fnam不再lname的索引中。
使用all_name索引,但是又查询了title列,title列不在索引里。
这篇关于MySql- Explain的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-07MySQL读写分离入门:轻松掌握数据库读写分离技术
- 2024-12-07MySQL读写分离入门教程
- 2024-12-07MySQL分库分表入门详解
- 2024-12-07MySQL分库分表入门指南
- 2024-12-07MySQL慢查询入门:快速掌握性能优化技巧
- 2024-12-07MySQL入门:新手必读的简单教程
- 2024-12-07MySQL入门:从零开始学习MySQL数据库
- 2024-12-07MySQL索引入门:新手快速掌握MySQL索引技巧
- 2024-12-06BinLog学习:MySQL数据库BinLog入门教程
- 2024-12-06Binlog学习:MySQL数据库的日志管理入门教程