关于tidb_opt_insubq_to_join_and_agg参数的疑问

【 TiDB 使用环境】
v5.1.2

【概述】 场景 + 问题概述
请问下,像是如下sql,在x_tab表数据量几十亿,IN子查询数据量几千万场景下,该怎样优化呢。

EXPLAIN ANALYZE 
SELECT 
    x.uid, 
    sum(x.m) as amount 
FROM 
    x_tab x
WHERE 
    uid IN
    (
        SELECT 
            uid 
        FROM 
            x_tab
        WHERE 
            z_time BETWEEN '2022-03-29 00:00:00' AND '2022-03-30 00:00:00' 

        UNION DISTINCT 
        
        SELECT 
            uid 
        FROM 
            y_tab 
        WHERE 
            z_time BETWEEN '2022-03-29 00:00:00' AND '2022-03-30 00:00:00' 
         
    )
GROUP BY 
    x.uid;

如果不做任何处理,直接在TiFlash上运行,会自动将子查询转为inner join语义

如果禁止该优化,则我的得到的反而是semi join,而非将子查询展开后的IN查询语义。

set SESSION tidb_opt_insubq_to_join_and_agg=OFF;

如果可以执行,麻烦发一下两个执行计划看看哈,explain analyze 看一下两个执行一下,对比一下查询的扫描数据的情况,看看有没有更好的优化建议。

该主题在最后一个回复创建后60天后自动关闭。不再允许新的回复。