Sql IN条件下的查询优化

Sql IN条件下的查询优化,sql,Sql,我有一个使用not in的查询 当我执行同样的操作时,需要24秒 请对其进行优化 SELECT GRIRNO,grirdate FROM GRIRmain where grirno in (select grirno from grir_pass where ins_check is not null) order by grirdate desc 如果表中有GRIRNO主键,则下面的查询可能会执行得更好

我有一个使用not in的查询

当我执行同样的操作时,需要24秒

请对其进行优化

SELECT GRIRNO,grirdate 
FROM GRIRmain 
where grirno in (select grirno 
                 from grir_pass 
                 where ins_check is not null) 
order by grirdate desc

如果表中有
GRIRNO
主键,则下面的查询可能会执行得更好

       SELECT GRIRNO,grirdate FROM GRIRmain 
       where not exists  (select 1  from grir_pass 
       where ins_check is not null
       and grir_pass.grirno=GRIRmain.GRIRNO
                     )
         order by grirdate desc

从您的注释来看,您似乎不需要存在子查询中的IN子句可以通过内部联接进行重构

    SELECT GRIRmain.GRIRNO,GRIRmain.grirdate 
    FROM GRIRmain 
    INNER JOIN ( 
      select distinct grirno 
      from grir_pass 
      where ins_check is not null
    ) t on t.grirno = GRIRmain.grirno 
    order by grirdate desc

您声称您的查询使用的是
而不是
中的
,但是,您显示的查询使用的是
中的
,您使用的是哪种产品?“SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加一个连接,
postgresql
oracle
sql server
db2
,…并非所有的
条件都可以更改为连接-这是另一种情况result@user3698150这就是为什么used存在,但似乎你不需要存在