日期:2014-05-17  浏览次数:20879 次

用什么方法可以提高Not in的效率?
分别有两个表A和B,表B中的记录包含表A中的记录,且比表A多。如何查找出表B中不存在于表A中的记录。

用not   in可以找出,但是效率太低了,如果涉及表A、表B记录量很多的话,更是跑不出来。
例如   :
select   B.*   from   A,B   where   B.key_id   not   in   (
select   A.key_id   from   A
)

有其他高效的方法吗?外联?NOT   Exist?

------解决方案--------------------
不好意思提示写错了,记住了。只有在数据量很大的时候才使用提示,这样才可以邮箱的改变执行计划。
select /*+ use_hash(a,b)*/
b.*
from a,b
where a.key_id=b.key_id(+)
and b.key_id is null
------解决方案--------------------
a.key_id=b.key_id(+)
and b.key_id is null
是最快的方法