SQL查询优化(子查询)

SQL查询优化(子查询),sql,oracle11g,oracle10g,Sql,Oracle11g,Oracle10g,我有下面的查询,我想调优它,因为查询需要更多的时间来运行。请帮帮我 select info_id from info_table where info_id not in (select info_id from some_table where info_id is not null) AND rownum <= 1000 ; innerquery返回数百万行,因此出现了问题 sele

我有下面的查询,我想调优它,因为查询需要更多的时间来运行。请帮帮我

select  info_id 
from info_table 
where info_id not in (select info_id 
                      from some_table 
                      where info_id is not null) 
AND  rownum <= 1000 ;
innerquery返回数百万行,因此出现了问题

select info_id
from info_table e
where not exists (select 'x' from some_table where info_id = e.info_id);
这将避免内部排序或合并,并且应该更快

你甚至可以尝试外部连接

select info_id
from info_table e LEFT OUTER JOIN some_table d
ON e.info_id= d.info_id
WHERE d.dept_no is not null;

根据我的实验,你的查询和问题的作者有相同的解释计划。好的,看我重写你的左连接查询,正如我所说的,没有任何区别。Oracle Optimizer会重写此查询,使其与其他查询相同。我们必须添加索引或更改表的结构以提高性能。是的,我做了,对我来说,它们持续的时间是相同的。当然,我们可以查看AWR快照并比较闩锁和其他锁的数量,但我认为现在这无关紧要。Hi RealSpirtuals,我尝试了not exists,并且在返回的行数中功能上存在冲突。请帮忙me@realspirituals您的表上可能有一些索引,我没有,所以它总是执行全表扫描。我想看看您的解释计划。之前别忘了收集表格的统计数据。
SELECT info_id
  FROM info_table
  LEFT OUTER JOIN some_table ON info_table.info_id = some_table.info_id
 WHERE some_table.info_id IS NULL