Mysql Explain的使用
各个字段的含义
-
id:表示执行顺序
相同的id执行顺序为从上到下
不同的id执行顺序为从大到小
-
select_type:用于表示查询类型
-
SIMPLE:简单的select查询,查询中不包含子查询或union
-
PRIMARY:查询中包含任何复杂的子部分,最外层的查询则被标记为primary
-
SUBQUERY:在select或where列表中包含了子查询
-
DERVIED:在from列表里面包含的子查询被标记为DERVIED(衍生),mysql执行完子查询之后会把结果放在一个临时表里面,DERVIED后面的数字表示是由哪个表查询后衍生出来的
-
UNION:
若第二个select出现在union之后,则会被标记为union
若union包含在from子句的子查询中,外层select将被标记为DERVIED
-
UNION RESULT:从UNION表获取结果的SELECT
-
-
table 表名
-
type:访问类型列表
最好到最差如下:system>const>eq_ref>ref>range>index>all
一般查询最好能达到ref级别,最少要达到range级别
-
const:出现于主键索引或者唯一的(仅查出一条)
select * from user where id = 1;
-
eq_ref:对于每个索引键,表中只有一条记录与之匹配
-
ref:非唯一性索引扫描,返回匹配所有单独值的所有行
-
比如以部门作为索引
查研发部,有两百人,则查研发部的这条语句就是ref级别的
查总裁部,只有一个人,则查总裁办的这条语句就是eq_ref级别的
-
-
range:只检索给定范围的行,使用一个索引来选择行(查出来的数据要是应只有一条)
key列显示使用了哪个索引,一般出现于范围查询,例如between,in等
-
index:index和all都是全表扫描,但是index只遍历索引
-
all
-
-
possible_keys:查询中可能可以用到的索引
-
key:实际上用到的索引
-
key_len:表示索引中使用的字节数,通过该列计算查询中使用的索引的长度,在不损失精确性的情况下,长度越短越好
-
ref:显示索引的哪一列被使用了,如果可能的话,是一个常熟,哪些列或者常量被用于查找索引列上的值
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)