SQL Sever 中NOT IN 的效率低于NOT EXISTS和LEFT JOIN/ IS NULL,后两者的执行计划相同
MySQL对三者生成三个不同的执行计划,其中NOT EXISTS 的效率明显低于NOT IN 和 LEFT JOIN/ IS NULL。
对于Oracle,三者生成完全相同的执行计划,cost完全相同。(此为原文,结论存疑)
(笔者简单测试了三种情况,结果不完整,待补充
1. 1万行做右表,主外键连接的,NOT IN 和NOT EXIST 计划一致,使用NESTED LOOPS ANTI, LEFT JOIN 使用HASH JOIN OUTER,最后一个比前边的效率略好5%
2.1 两个小于100行的表, 主外键连接, LEFT JOIN和NOT EXISTS 计划相同,使用HASH JOIN RIGHT ANTI ,NOT IN 使用FITER, 后者效率差22%
2.2 同上两个小表,可空字段连接,情况完全同2.1 )
补充:LEFT JOIN/ IS NULL 会产生中间表,所消耗的内存空间得考虑进去。
原文:http://www.cnblogs.com/wanana/p/3512606.html