记MySQL下一次DEPENDENT SUBQUERY的优化

原查询大致为:

sql 复制代码
select a.field1,a.field2,a.field3,case (select count(1) from b where b.field1 = a.field4 and b.field2 = 'xxx'...) > 0 then 1 else 2 end
from a
where a.field1 = 'xxx' and a.filed2 = 'xxxx' and case (select count(1) from b where b.field1 = a.field4 and b.field2 = 'xxx'...) > 0 then true else false end

通过explain 后,参数如下:

  • select_type: DEPENDENT SUBQUERY
  • type: index

a表数据正常走索引无需考虑,原因后述;

b表索引配置顺序如下:

联合索引(field1 ,field12,field13,field14)

查询速度大致为30秒,a表与b表均为3万到5万条

处理结果

调整b表索引顺序为:联合索引(field12,field13,field14,filed1)

调整后查询速度为1点几秒

原因分析

由于此种关联子查询方式执行逻辑为,先查询外表,后根据外表结果集依次遍历内表,虽然走索引,但仍然为全索引扫描,速度并没有提升。

故外表a无需考虑,只需要将内表b索引调整,将field1字段索引调后或删除,令b表先进行数据过滤,这样可以减少a表遍历时内循环b表数据集的数据量,从而提升速度。

相关推荐
一只叫煤球的猫1 分钟前
虚拟线程生产事故复盘:警惕高性能背后的陷阱
java·后端·性能优化
喵叔哟38 分钟前
第1章:Neo4j简介与图数据库基础
数据库·oracle·neo4j
喵叔哟39 分钟前
第6章:Neo4j数据导入与导出
数据库·oracle·neo4j
甜甜的资料库1 小时前
基于微信小程序的睡眠宝系统源码数据库文档
数据库·微信小程序·小程序
代码老y1 小时前
Redis:现代应用开发的高效内存数据存储利器
数据库·redis·缓存
远方16092 小时前
15-Oracle 23ai Vector Search Similarity Search-向量相似性和混合搜索-实操
数据库·ai·oracle
zz0723202 小时前
第二十周:Redis(二)
数据库·redis·缓存
杨超越luckly3 小时前
“详规一张图”——新加坡土地利用数据
前端·数据库·arcgis·信息可视化·数据分析
NineData3 小时前
NineData数据库DevOps功能全面支持百度智能云向量数据库 VectorDB
数据库·人工智能·mysql
TDengine (老段)4 小时前
TDengine 开发指南—— UDF函数
java·大数据·数据库·物联网·数据分析·tdengine·涛思数据