GBase 8a
其他
问答

多表关联写法疑问

发表于2025-06-27 08:55:0377次浏览8个评论

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

【GBase版本】:9.5.3.28.1880496bd

【操作系统】:

【CPU】:

【问题描述】*:版本升级后原来的

select xxx from tab_a a

left jon tab_b b

on a.id=b.id

and b.dt='20250627'

where a.dt='20250627'

需要改成下面,不然查询效率很慢,不是很理解为什么要这样写,和市面上其他数据库基本写法不能保持一致吗?这样导致需要改写大量存量脚本

select xxx from tab_a a

left jon (select * from tab_b where dt='20250627') b

on a.id=b.id

where a.dt='20250627'

甚至是需要改成下面才有效

select xxx from  (select * from tab_a where dt='20250627') a

left jon (select * from tab_b where dt='20250627') b

on a.id=b.id

评论

登录后才可以发表评论
用户头像
GBase社区管理员发表于 1年前

请问是从哪个版本升级上来的。

进行join的两个表都是hash分布表吗?hash分布键是id列吗?

用户头像
GBase社区管理员发表于 1年前
@社区管理员

根据您的描述,最好能分析一下业务SQL的Trace日志,建议您联系项目售后支持人员进行详细排查

GBase用户12851发表于 1年前
@社区管理员:不是一个SQL额,是所有SQL都这样,肯定是你们底层改了算法或什么吧
GBase用户12851发表于 1年前
@社区管理员:应该是hash分布表,创建表时没有额外关键词,也不是复制表。从哪个版本升级上去的要专门负责这块的同事才知道,我就想知道你们最新版本就是要这样写法才行吗?
用户头像
GBase社区管理员发表于 1年前
@GBase用户12851

如果是没有额外关键词,那不是hash分布表,是随机分布表。

程序是有left join右表拉表时带单表条件过滤的优化逻辑的。建议建成hash分布表再试一下

GBase用户12851发表于 1年前
@社区管理员:好的,试了一下hash分布表确实可以,感谢
用户头像
levvel发表于 3个月前
哎呀,怎么说呢,嗯......
GBase用户51884发表于 2个月前
等待有缘人解答。