TiDB hash left join 驱动表

TiDB hash left join 有固定的驱动表吗,比如左表?看执行计划是都会选取代价小的作为build,跟其他的数据库MySQL有何不同?咋做到的
image
image

2 个赞

您可以试下左右表数据不对等的情况下做个explain analyze,如果对等的情况下应该会走inner join的

2 个赞

t1 表
image
t2表
image

explain analyze SELECT * FROM t1 LEFT JOIN t2 ON t1.t2_id = t2.id;

ti表数据多,还是用t2作为build端呢

3 个赞

https://docs.pingcap.com/zh/tidb/v4.0/sql-statement-explain-analyze/#hashjoin


可以看下这个

3 个赞


3 个赞

按照这个说法,left join 右表是inner表,right join 左表是inner表,然后build都是在inner表
但是,现在的疑问是,无论left join还是right join,都在t2表做了build


3 个赞

理论上返回所有数据的表应该是驱动表合理,看下表的健康度先重新收集统计信息看看

3 个赞

在之前的版本里,TiDB 支持了用 SQL 语义上的 outer 表来作为 build 端进行 hash join。
这个主要是为了优化小表 outer join 大表场景下的表现。
GitHub Issue: https://github.com/pingcap/tidb/issues/6868

2 个赞

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