阅读(117)
赞(13)
Mycat2 Join下推
2021-09-09 15:13:59 更新
只涉及单表与单表之间的join,只要它们的存储节点相同,就可以下推
涉及任意表与全局表之间的left/inner join都可以下推
涉及分片表之间的分片算法的数据分布相同同时使用拆分键进行等值查询就可以下推
值得注意的是,上述说的表并非指a join b on a.id = b.id
中a
与b
只能是逻辑表,而是可以使用多次运算得出的临时表
FULL JOIN
都不支持下推.Mysql没有这个运算,不讨论FULL JOIN
所有
是指INNER
,LEFT
,RIGHT
,SEMI
,ANTI
左表 | 右表 | JOIN类型 | 额外下推条件 |
---|---|---|---|
单表 | 单表 | 所有 | targetName相同 |
单表 | 全局表 | 所有 | |
单表 | 分片表 | 不支持 | |
全局表 | 单表 | 所有 | |
全局表 | 分片表 | INNER,RIGHT | push_down_join_broadcast可以强制下推 |
全局表 | 全局表 | 所有 | |
分片表 | 全局表 | INNER,LEFT,SEMI,ANTI(不支持RIGHT) | push_down_join_broadcast可以强制下推 |
分片表 | 单表 | 不支持 | |
分片表 | 分片表 | 所有 | ER关系,分片键等值查询 |
以上规则适用于能被重写为全局索引表分片表
以上规则适用于能被重写为join的子查询,无法下推的join运算,mycat会进行运算得出正确的结果