【非等值连接】starrocks是不是不太擅长大量的非等值连接?

【详述】在做某个需求时sql需要用到许多非等值连接,sql执行根本查不出来,在不改写sql的情况下,有没有什么优化手段。大概的逻辑就是,主表t1是一个目标表,每条数据就是一个目标,副表t2是一个完成量的表 ,某一条目标,在完成量的表t2中有很多条记录都是符合这个目标的(会根据这个目标自身的属性在完成量表中找到符合这个目标的完成量,这里就是需要用到非等值连接的地方),后面再根据目标汇总,拿到每个目标的完成量。

核心逻辑 :

– t1 和 t2 的关联核心逻辑
on
– 强行拼接一个等值连接,否则sr报错
substr(concat(“1”, t1.target_id), 1,1) = substr(concat(“1”, t2.sales_org_code), 1,1)
and case
when coalesce(t1.shop_code, ‘’) = ‘’ then
– t1中的目标会下发到某个组织(这个组织可能是各种等级的组织)
t1.sales_org_code in (
t2.sales_org_code, t2.sales_org_code_l4,
t2.sales_org_code_l5, t2.sales_org_code_l6,
t2.sales_org_code_l7, t2.sales_org_code_l8,
t2.sales_org_code_l9, t2.sales_org_code_l10
)
– 或者t1中的目标分解到具体的门店
else t1.shop_code = t2.shop_code end
and (
t1.dimension = 0
and
(t1.product + 1 = t2.category_type or t1.product = 2) – 当product = 0
or (
t1.dimension = 1
and (
(
t1.product_type = 1
and
array_contains(t1.product_code, t2.spu_code) =
1
)
or (
t1.product_type = 2
and
array_contains(t1.product_code, t2.sku_code) =
1
)
or (
t1.product_type = 3
and
array_contains(t1.product_code, t2.mkt_series_code) =
1
)
or (
t1.product_type = 4
and
array_contains(t1.product_code, t2.mkt_subseries_code) =
1
)
)
)
)

【背景】做过哪些操作?
【业务影响】
【StarRocks版本】2.3.7 43fbd55
【集群规模】不详
【机器信息】不详

我发现主要就是这一块有问题,我去掉这个,秒出结果

发我个explain costs 执行计划看看。有些是在2.5上优化过了。我看看你这个场景

我已经改写了sql了,将这部分改为等值连接了,现在秒出结果