分布式 | Left join ... on shardingColumn = N 优化为整体下发单节点的可行性

本文探讨了SQL左连接中on和where条件的实质区别,指出在左join场景下,on关联条件影响的是右表数据而非全左表,而where用于筛选虚拟表。作者通过实例和伪代码解释了on与where在实际执行中的作用,并揭示了Suppose-1中关于简化路由的优化方案在左join中的局限性。

作者:文韵涵

爱可生 DBLE 团队开发成员,主要负责 DBLE 需求开发,故障排查和社区问题解答。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


背景

SQL-1:select a.name from tabler a Left Join gtable1 b on a.name = b.name and a.id = 2; (tabler、gtable1分别为分片表、全局表,其中tabler.id 为分片列;两个表配置的节点均为dn1~4)

查看 SQL-1 在 DBLE 中执行计划 Explain-1:

从explain中,将分片表 tabler 分别下发各个节点,全局表 gtable1 单独下发一个节点分别获取数据;

另外,没有 ”on a.name = b.name and a.id = 2 ” 条件的身影,想必是在DBLE层面对数据进行的join合并和筛选处理了。

提出Suppose-1

SQL-1 on中 “a.id = 2”,a.id作为分片列; 看起来可以根据a.id明确路由单节点下发tabler表,然后gtable1作为全局表可以随意选一个路由节点下发;

具体假设:根据“a.id = 2” 确定路由节点为dn1,那么SQL-1貌似可以整体下发(直接透传)到dn1节点中了,这样以来可以减少在DBLE层面join数据的处理。

After a while:…咦…啊…为啥…好像不行诶…

经过一顿胡乱操作,发现 Suppose-1 的优化方案并不适合在left/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值