2026/6/1 10:41:41
网站建设
项目流程
外贸类网站,网站源文件修改,随州网络科技有限公司,深圳比较大的做网站设计公司1、问题语句
最近遇到一个问题#xff0c;发现开发人员比较喜欢单一的将表放一块一起做关联。如果有了先过滤后关联的思维#xff0c;大部分语句的性能会获得提升。
以下是真实项目简化而来的例子
select * from ( select a.c1, a.mid, a.bcode,c.ttime ,row_number()over( p…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 fromT11A,T12 b,t13 c where a.id1b.id1 and a.id1c.id1()and a.c13 and b.c13 and b.bcode0300)tt where tt.rn1;计划该语句最终是获取去重后rn1即每组第一行的数据而我们分析到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 fromT11A,T12 b where a.id1b.id1 and a.c13 and b.c13 and b.bcode0300)tt,(selectmax(ttime)ttime,id1 from t13 group by id1)b where tt.rn1 and tt.id1b.id1();计划最终性能提升了几倍在项目中的数据较多原本语句也复杂改写后从原来跑20分钟到最终秒级执行完。3、小结我们一般要先过滤出小结果集再关联相当于我们先分组减去重复的部分减少对比次数从而提升效率。