inner join 无法下推tiflash

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】
5.0.3

【概述】 场景 + 问题概述
两个group by 后再join 无法下推tiflash

【背景】 做过哪些操作


建表语句和sql.sql (4.0 KB)

如果直接join,则可以正常下推,所以5.x版本join的下推还是不太行?

【现象】 业务和数据库现象
join操作没有下推,导致所有数据推送到tidb server, oom宕机

【问题】 当前遇到的问题

【业务影响】
因为无法正常下推,该业务无法正常进行下去

【TiDB 版本】
5.0.3

1 个赞

你的 SQL 可以先改写一下,先关联再 group by

1 个赞


我试了,不行的

1 个赞

你的期望是啥?你返回的结果集数量本身就是很高啊

1 个赞

正常情况是,join下推到tiflash,因为是inner join,结果应该只有9w多数据,推送给tidb

1 个赞

能把 你修改后的 explain analyze 执行计划发我一下不(全一点的)

1 个赞

explain.txt (4.3 KB)

1 个赞

看你给我的是 explain 的结果,最好给我一下 explain analyze 的结果,explain 的是评估的信息,不一定准确

1 个赞

explain.txt (7.7 KB)


如果吧avg改为sum,join可以下推,但是explain的执行计划感觉不准啊,实际的执行计划没问题
另外我们是需要avg的,改为sum只是因为cast不能下推

1 个赞

这样套一层倒是可以,可以有简化的sql吗,我们现在发现我们几乎每个sql都要手动调校…

1 个赞

另外为什么用了avg就不能下推join了呢,tiflash mpp文档显示是可以下推avg的

1 个赞

请在 explain sql; 在执行 show warnings; 看看不能下推的具体原因

应该不能的

对于第一条先group 再 join的吗?
我直接explain,后再show warnings,没数据,这条不能explain analyze,否则tidb 直接宕机

对于倒数第二条,先join再group by,explain analyze后,再show warnings,还是没数据
EXPLAIN ANALYZE SELECT a.src_author_id, COUNT(1) cnt, AVG(a.forward_cnt) AS avg_forward_cnt,
AVG(a.reply_cnt) AS avg_reply_cnt,
AVG(a.like_cnt) AS avg_praise_cnt
FROM kol_doc a INNER JOIN kol_profile b ON a.src_author_id = b.src_author_id AND b.data_from = 1
GROUP BY a.src_author_id

show warnings,没数据
image

我不知道你后几句话的意思是啥,没明白

哦哦哦,回答的别人

1 个赞

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