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

先过滤后关联的优化经验分享

1、问题语句

最近遇到一个问题,发现开发人员比较喜欢单一的将表放一块一起做关联。如果有了先过滤后关联的思维,大部分语句的性能会获得提升。
以下是真实项目简化而来的例子

select * from(select a.c1,a.mid,a.bcode,c.ttime,row_number()over(partition by a.bcode order by c.ttime desc)rn from"T11"A,T12 b,t13 c where a.id1=b.id1 and a.id1=c.id1(+)and a.c1=3 and b.c1=3 and b.bcode='0300')tt where tt.rn=1;

计划:

该语句最终是获取去重后rn=1(即每组第一行)的数据,而我们分析到t13表数据量很多,这里简单的关联后再去重,性能消耗较多,而优化思路是先t11表和t12表先过滤条件和去重之后,以及t13表去重过滤后,两个小的结果集进行关联,这样性能会提升。因此根据我们的思路进行改写。

2、改写

select tt.c1,tt.mid,tt.bcode,b.ttime,rn from(select a.c1,a.mid,a.bcode,a.id1,row_number()over(partition by a.bcode order by null desc)rn from"T11"A,T12 b where a.id1=b.id1 and a.c1=3 and b.c1=3 and b.bcode='0300')tt,(selectmax(ttime)ttime,id1 from t13 group by id1)b where tt.rn=1 and tt.id1=b.id1(+);

计划:

最终性能提升了几倍,在项目中的数据较多,原本语句也复杂,改写后从原来跑20分钟,到最终秒级执行完。

3、小结

我们一般要先过滤出小结果集再关联,相当于我们先分组减去重复的部分,减少对比次数,从而提升效率。

http://www.jsqmd.com/news/299659/

相关文章:

  • 【视觉大模型论文精读】带你逐段解析 (持续更新)——总览
  • 「LUCKY STUN穿透」使用UptimeRobot使UPnP映射的TCP规则保持活跃
  • AI应用架构师详解:智能供应链预测系统模型服务化设计(TensorFlow Serving实践)
  • A. Perfect Root
  • 曲线Curve
  • 「LUCKY STUN穿透」在Docker中使用MiniUPnP为BT客户端自动添加内外端口不同的映射规则
  • 【论文学习】重新审视面向持续图像分割的基于查询的 Transformer || 用于二分类图像分割的多视图聚合网络
  • 基于STM32的智能停车场系统设计(实物设计)
  • Kafka与RabbitMQ相比有什么优势? - 详解
  • MiniMax的全球化之路:中国AI公司出海的新样本
  • C++工程师的前端之旅:前后端对话 - 实时通信篇 02 - WebSocket订阅(观察者模式实现)
  • 动态注册RBAC
  • YOLO26改进 - 采样 | ICCV 顶会技术:WaveletPool 小波池化强化采样,保留小目标细节
  • P1948 [USACO08JAN] Telephone Lines S
  • 深度测评10个AI论文平台,研究生高效写作必备!
  • 图神经网络分享系列-GGNN(GATED GRAPH SEQUENCE NEURAL NETWORKS)(三)
  • 音视频学习(八十六):宏块
  • 完整教程:(数据结构)栈和队列
  • day11|150. 逆波兰表达式求值 239. 滑动窗口最大值 347.前 K 个高频元素
  • 求多个乘法逆元(模板)
  • 语义分割实战——基于EGEUNet神经网络印章分割系统3:含训练测试代码、数据集和GUI交互界面
  • 语义分割实战——基于EGEUNet神经网络印章分割系统2:含训练测试代码和数据集
  • 语义分割实战——基于EGEUNet神经网络印章分割系统1:数据集说明(含下载链接)
  • 强烈安利!本科生毕业论文必备TOP8 AI论文网站测评
  • STM32F0实战:基于HAL库开发【2.3】
  • 工信部教考中心《系统可靠性工程师(高级)》开课通知
  • 机房U位管理别瞎忙!这套系统让运维效率翻倍
  • 告别设备束缚 RetroArch-web 把童年游戏装进口袋,cpolar解锁全场景游玩
  • 使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 44--Pytest框架钩子函数
  • 使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 43--添加allure测试报告显示信息和其他封装方法