oracle-not in 和not exists的区别
1.not in 和not exists效率上的区别
在查询语句中使用not in的时候会对内表进行全表扫描,没有用到索引。而not exists的子查询仍然会用到表上的索引。所以无论的大表还是小表,使用not exists都会比使用not in 要快。当然这的前提是表中有索引。
2.not in 和not exists结果上的区别
Query Q1
SELECT *
FROM UnitOfStudy
WHERE uosCode NOT IN (
SELECT mainUnit
FROM AcademicStaff
WHERE deptID = 'SIT' )
Query Q2
SELECT *
FROM UnitOfStudy u
WHERE NOT EXISTS (
SELECT *
FROM AcademicStaff
WHERE deptID='SIT' AND mainUnit=u.uosCode )
---------------------
如果AcademicStaff 表中 有一条记录deptID = 'SIT',mainUnit = null。这个时候not in语句跑出来的结果将会是空的。而not exists结果会是正确的。