tidb进行join的时候。需要进行数据的exchange吗?

背景:比如selectdb,doris,starrocks有 * [Broadcast Join]

  • [Partition Shuffle Join]
  • [Bucket Shuffle Join]
  • [Colocate Join]

tiflash也有Shuffle join,Broadcast Join。

查询了tidb文档。没有发现关于tidb的Shuffle join,Broadcast Join等。
有点蒙圈了。。请问tidb是怎么实现的?

tikv本身不支持broadcast join或shuffle join !

tikv的join和普通行存关系数据库一样

TiKV 本身不直接执行复杂的 Join 操作 ,Join 主要在 TiDB Server 或 TiFlash 中执行:

A join B where A.id=B.id;如果A.id,B.id在不同的tikv上面。那么他们join的时候,是不是出现了问题?
如果这个时候进行数据的exchange,A.id B.id就再一起了。就可以进行join了

不知道,我的理解是否正确。

join是是把数据拿到tidb结点算的。
A join B where A.id=B.id ,tidb选择先从tikv取出来a表数据,获取到筛选条件,再去tikv拿b数据,当然这只是一种,实际执行有多种方案

过滤数据可以在tikv,不同tikv之间数据join,都是汇总到tidb上join的

TiDB 其实也支持 Shuffle Join 和 Broadcast Join,只不过这两种连接方式仅在 TiFlash 的 MPP 模式下生效 ,并非 TiDB 原生单机计算层的基础 Join 类型

当 Join 的一侧表(通常是小表)数据量很小,足以放入内存时,TiDB 会将小表的全量数据 Broadcast Join(复制)到另一侧表(大表)所在的所有节点,然后在每个节点上进行本地 Join

Shuffle Join是当 Join 的两表数据量都较大,无法通过广播小表优化时,TiDB 会将两表的数据按照 Join 键进行 哈希分片(Shuffle) ,相同 Join 键的数据会被分发到同一个节点,然后在每个节点上进行本地 Join

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