IN条件的查询优化

时间:2018-11-07 08:48:06

标签: sql

我有一个查询,查询中不是。

当我执行相同操作时,需要24秒。

请进行相同的优化

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

2 个答案:

答案 0 :(得分:1)

如果表中的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

从您的评论看来,您不必存在

答案 1 :(得分:0)

根据您的代码,可以使用内部联接重构子查询上的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