where 条件中使用子查询 不走key索引 查询缓慢

【StarRocks版本】2.0.1-f0de9ec
【集群规模】:3fe +5be
【机器信息】32C/128G
背景:数仓任务中很多增量任务需要 查询本表的最大 的 id ,根据此id 查询其他表的数据增量写入。
比如: insert into tablea select * from tableb where id > ( select max(id) from tablea);
这种类似 sql 在where条件中加入子查询后发现执行特别缓慢。
这里举个简单的查询例子
两个SQL分别查询耗时很短,但是如果拼接到一起,查询时间就会变得很长具体如图:
猜测应该是执行计划有问题?
SQL1:


SQL2:

目前的方案是把SQL1 的结果先用脚本查出来,再通过脚本拼到SQL2里执行。
但是数仓任务 理想状态下是纯SQL。。希望这个执行计划可以优化下 。

资料:
执行计划以及profile:
explain.sql (570.1 KB)

您好,你将block_number这一列作为traces_bsc这张表的key,然后再做一下查询看下效果。看profile你的traces_bsc这张表是全表扫描,没有达到裁剪的效果。

block_number 这列是unique key,而且是分区key

您好,麻烦建表语句可以发一下嘛?

好的,表结构私信你了

您好,看您的表建的是unique表,其底部实现是merge-on-read,故在分析profile时发现底部merge花费的时间比较多,您要不用我们的主键模型建表试一下?观察看看查询性能会不会提升上去?

我理解应该是执行计划的问题吧 在任何模型中应该都会有这种子查询的需求,当前这个表非常大了 4T的数据不太好切换模型。

您好,和我们RD同学确认了一下,目前对于非等值查询这块是没办法做到分区分桶裁剪的。