当前位置: 首页 > news >正文

记MySQL下一次DEPENDENT SUBQUERY的优化

原查询大致为:

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表数据集的数据量,从而提升速度。


http://www.mrgr.cn/news/61944.html

相关文章:

  • Python毕业设计选题:基于Web学生会网站的设计与实现-django
  • ubuntu openmpi安装(超简单)
  • 大数据新视界 -- 大数据大厂之大数据重塑影视娱乐产业的未来(4 - 4)
  • LiNo论文解析
  • 智能工厂的设计软件 “word”篇、“power”篇和“task”篇
  • 《链表篇》---环形链表II(返回节点)
  • 从0学习React(10)
  • 代码随想录算法训练营第三十一天|Day31 贪心算法
  • 【PG高可用】patroni配置文件
  • 怎样禁止运行电脑某个软件(如何禁止运行电脑软件)?3分钟学会这4招!
  • Educational Codeforces Round 171
  • OBC充电机测试性能评估
  • Java面试经典 150 题.P88. 合并两个有序数组(001)
  • 【C++】string 类深度解析:探秘字符串操作的核心
  • python公寓出租管理系统-计算机毕业设计源码00130
  • 项目开发的架构模式与异步请求(AJAX)
  • 香橙派Orangepi 5plus 配置Hailo-8/Hailo-8L
  • 2024 Rust现代实用教程:1.2编译器与包管理工具以及开发环境搭建
  • 荒野大镖客:救赎 PC版整合包
  • 【K8S系列】Kubernetes 中 NodePort 类型的 Service 无法访问的问题【已解决】
  • 基于安卓Android的助农商城系统APP(源码+文档+部署+讲解)
  • Rust 力扣 - 54. 螺旋矩阵
  • 数据结构算法学习方法经验总结
  • git快速合并代码dev->master
  • ECharts 折线图 / 柱状图 ,通用配置标注示例
  • JAVA基础-Map集合