关于left join模糊关联表-效率低

sql如下: 关于left join模糊关联表-效率低, 有什么其他模糊关联的办法吗, 现使用 instr模糊关联, 100条数据需要1秒钟, 而使用 like更加慢

SELECT
t.*
FROM
table_a t
LEFT JOIN table_b et ON et.s_date = t.s_date
– 用like查询会非常慢,查不出来,改为instr
– and et.all_s_name like CONCAT(’%’,t.s_name,’%’)
AND instr( et.all_s_name, t.s_name ) > 0
WHERE
t.s_date >= ‘2023-6-1’
AND t.s_date <= ‘2023-6-1’

table_b这个表很大吗?可以试下on后面加下table_b表的限制条件:et.s_date>= ‘2023-6-1’ AND et.s_date <= ‘2023-6-1’

不大, A表 2000条, B表4w条, 都是条件限制了只查1天的数据, 就是用模糊关联就速度就慢

能生成下profile吗

正则匹配regexp试过吗

用正则匹配更加慢

不好意思, 这个不会用; 我这就是想 left join关联, 但是需要模糊匹配, 没找到一个关联快的办法

你改成这样试下
SELECT
t.*
FROM
table_a t
LEFT JOIN table_b et ON et.s_date = t.s_date
WHERE
t.s_date >= ‘2023-6-1’
AND t.s_date <= ‘2023-6-1’
and et.s_date >= ‘2023-6-1’
AND et.s_date <= ‘2023-6-1’
AND instr( et.all_s_name, t.s_name ) > 0

另外profile生成的方法:https://docs.starrocks.io/zh-cn/2.5/administration/query_profile

这个表有多少列,看上去是一个已知的BadCase,explain costs 把执行计划发下?

已经有个临时优化版本,发你一个包试试?

不知道这个查询优化里面有没有Runtime Filter和谓词下推

et.all_s_name 这个里面会有多少个name呢,可以考虑把这个表用table function 膨胀一下,然后把不等值变成等值join