Cascades优化器关于Join Order的实现?

在看TiDB中Cascades优化器相关的代码,发现在onPhaseExploration似乎没有和Join Order相关的规则,想要问一下在Cascades优化器中关于Join Order的规则有实现吗?具体的代码是在哪儿?

补充:看到了,应该是在onImplementation的探索的,但是似乎目前只实现了HashJoin和MergeJoin。

1 个赞

应该是的,也找大一些文档大概的介绍:
https://docs.pingcap.com/zh/tidb/stable/join-reorder#join-reorder-算法限制

https://blog.csdn.net/night_zw/article/details/109287546

1 个赞

这些文档有看到过,TiDB目前有两个优化器,老的优化器里面分为逻辑和物理优化,reorder在逻辑优化中,并且实现了贪心和动态规划的算法,另外一个是Cascades的优化器,里面逻辑优化和物理优化应该是放在一起的,而对于join order的选择放在了onImplementation里面的规则里面,并且似乎只体现在 了hash join上,也就是选择哪张表作hash。

1 个赞

是的:+1:

2 个赞

目前 cascades 中还没有具体的 join reorder 的实现,在讨论预期中还是倾向收集到 join group 之后再做贪心或者动态规划这样。

1 个赞

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。