如何在WHERE子句中使用IN进行查询运行得更快

时间:2015-11-01 19:50:19

标签: sql oracle performance oracle11g

我在Oracle11g中有这个查询:

SELECT DOC_ID,DOC_NAME,DESC
FROM TABLE1
WHERE DOC_ID NOT IN(
    SELECT DOC_ID FROM TABLE2
)

上面的sql查询运行速度很慢,因为表中有这么多数据 是否有任何解决方案可以获得相同的结果,性能更好,运行速度更快? 任何帮助非常感谢。
感谢。

2 个答案:

答案 0 :(得分:2)

使用WHERE EXISTS可能会有更好的效果:

SELECT DOC_ID,DOC_NAME,DESCr
FROM TABLE1 t1
WHERE not exists (
    SELECT 1 FROM TABLE2 where
    doc_id = t1.doc_id
);

示例:http://sqlfiddle.com/#!4/4b59e/3

答案 1 :(得分:1)

我不会使用in语句。如果你加入我想象的是你的一把钥匙,它应该快得多:

select tb1.DOC_ID, tb1.DOC_NAME, tb1.DESC 
from table1 tb1 
left join table2 tb2 
on tb1.DOC_ID = tb2.DOC_ID
where tab2.DOC_ID is not null