sql语句中关于not in的优化

我的项目中原本的业务逻辑是:
当复查选中回复并提交(isactive=50)后复查不能再选择该回复。
我的sql

select  b.isactive isa, a.* 
from PRP_HSEQ_REFORMREPLY a left join 
PRP_HSEQ_RECHECK b on a.id = b.replynumid where b.isactive is null

但是现在业务需求变动,需要只要被选中则不可继续选中
很简单啊只要没有关联关系就可以被选中了

select * from PRP_HSEQ_REFORMREPLY a where id  not in (
   select a.id from PRP_HSEQ_REFORMREPLY a inner join  
   PRP_HSEQ_RECHECK b on a.id = b.replynumid
)

只是因为not in 是全表查询,是需要用每一条结果遍历匹配子查询数据的效率肯定低下

于是我考虑了通过not exits进行优化,exits 只会返回两个结果 true or false,效率自然高很多。以下是我的语句。

select * from PRP_HSEQ_REFORMREPLY a where not exists (   
 select  a.id
 from  PRP_HSEQ_RECHECK b where a.id = b.replynumid
 )
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页