explain分析执行sql
1.执行sql
explain SELECT DISTINCT
JSON_UNQUOTE(rw.labels->'$.hostIp') AS host_ip
FROM
sigma_resource_wide rw
JOIN
sigma_resource_extend re
ON
rw.internal_address = re.internal_address
WHERE
re.v IN ('10.185.72.224', '10.185.72.226');
2.分析过程
3.结果说明:
你提供的 EXPLAIN 结果展示了一个两表 JOIN 查询的执行计划,下面是详细解析:
整体结构说明
EXPLAIN 结果显示这是一个两表连接查询,包含两行记录,每行对应一个表的处理过程:
第一行处理表re(sigma_resource_extend)
第二行处理表rw(sigma_resource_wide)
各列含义解析(以第一行为例)
plaintext
1 SIMPLE re NULL range idx_v idx_v 603 NULL 2 100.00 Using index condition; Using temporary
id:查询序列号,这里都是 1,表示单表查询或简单连接
select_type:查询类型,SIMPLE表示简单查询,非子查询或复杂查询
table:当前处理的表,re对应 sigma_resource_extend 表
partitions:分区信息,NULL 表示未使用分区表
type:连接类型,range表示使用索引范围查询,性能较好
possible_keys:可能使用的索引,idx_v是 sigma_resource_extend 表上的索引
key:实际使用的索引,idx_v,说明优化器选择了该索引
key_len:索引使用的长度,603 表示索引字段的总长度(字节)
ref:关联条件中使用的列或常量,NULL 表示范围查询不涉及关联
rows:预计扫描的行数,2 行,说明条件筛选后结果很少
filtered:过滤百分比,100.00% 表示所有扫描的行都满足条件
Extra:额外信息:
Using index condition:使用了索引下推(Index Condition Pushdown)
Using temporary:使用了临时表,可能用于结果排序或去重
第二行解析
plaintext
1 SIMPLE rw NULL ref uk_address,idx_address uk_address 803 func 1 100.00 Using index condition
type:ref表示使用非唯一索引或唯一索引前缀进行连接,性能较好
possible_keys:可能使用的索引uk_address和idx_address
key:实际使用的索引uk_address
ref:func表示使用函数作为关联条件
rows:预计扫描 1 行,说明通过关联条件精确匹配
Extra:Using index condition,同样使用了索引下推
关键性能点分析
连接类型分析:
re表使用range类型:通过索引范围查询,优于全表扫描
rw表使用ref类型:通过索引关联,性能较好
索引使用情况:
两表都使用了索引,避免了全表扫描
re表使用idx_v索引处理v IN条件
rw表使用uk_address索引处理连接条件
需要注意的问题:
re表的Extra中出现Using temporary:
表示 MySQL 需要创建临时表来存储中间结果
通常出现在需要去重或排序的场景,可能影响性能
rows数值很小(2 和 1):说明查询条件过滤效果好,预计性能不错
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步