You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将NOT IN关联子查询替换为JOIN以优化SQL性能

用JOIN替换NOT IN子查询优化SQL性能

现有两张数据表Tbl和Tbl2,原查询使用带NOT IN的关联子查询获取目标数据,但子查询存在性能瓶颈。下面把原语句替换为JOIN写法,既能优化性能,又能得到预期结果。

数据表内容

Tbl表

Col1Col2
1100
2101
2200
3205
4210

Tbl2表

Col1Col2
1100
2101
2200
3300
4210
5211
6212

原SQL语句

select 
    t1.col1, t1.col2 
from 
    tbl t1
where 
    t1.col2 not in (select t2.col2 
                    from tbl2 t2 
                    where t2.col1 = t1.col1)

优化后的JOIN写法

select 
    t1.col1, t1.col2
from 
    tbl t1
left join 
    tbl2 t2 on t1.col1 = t2.col1 and t1.col2 = t2.col2
where 
    t2.col1 is null

逻辑说明

用LEFT JOIN关联两张表的Col1和Col2,保留Tbl里的所有记录,匹配Tbl2中同Col1且Col2相同的记录。最后筛选出Tbl2侧没有匹配到的记录(即t2.col1 IS NULL),这和原NOT IN子查询的逻辑完全一致,但JOIN的执行计划通常更高效,尤其是数据量较大时,能避免子查询的重复执行开销。

预期输出

Col1Col2
3205

内容的提问来源于stack exchange,提问作者ashok kuna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 10:47:36