简要说明执行计划两者区别:

1.SQL> ALTER TABLE DEPT ADD CONSTRAINTS PK_DEPT PRIMARY KEY (deptno);

 

2.执行两次SQL 如下图所示:

ORACLE执行计划之【MERGE JOIN ANTI】与【MERGE JOIN SEMI】

ORACLE执行计划之【MERGE JOIN ANTI】与【MERGE JOIN SEMI】

3.结果:同样的SQL,因为in与not in 执行计划走了不同的链接方式,

merge join semi(也叫组合排序半连接),在外部行集,查找内部(即子查询)行集,匹配到一行就马上返回,不再往下查询。

merge join anti(也叫组合排序反连接),和semi相反,只有外部行在内部不能匹配的时候才返回。

注意:in与exists效率一样,not in 和 not exists大部分情况也是一样,实际情况要根据执行计划operation确认!

 

相关文章: