Oracle执行计划中的Filter执行过程请教

本帖最后由 shengbinqian 于 2013-9-28 14:53 编辑

以下是关于Filter执行计划的问题
emp员工表,dept部门表

语句1:
select   *   from dept where   dept.deptno   not  in   (select emp.deptno from emp )---注释: emp的deptno是不为空的
这条语句的 作用就是 查询没有员工的部门信息。
执行计划是:
SELECT STATEMENT, GOAL = ALL_ROWS        6      2     16
   FILTER          
      TABLE ACCESS FULL        BQSHENG        DEPT        3        3        24
      TABLE ACCESS FULL        BQSHENG        EMP                2        1        3


语句2:select * from dept,emp  where dept.deptno=emp.deptno(+) and emp.rowid is null
这条语句的 作用就是 查询没有员工的部门信息。
执行计划是:
SELECT STATEMENT, GOAL = ALL_ROWS       7      9      207
   FILTER         
     HASH JOIN OUTER                                      7      9     207
       TABLE ACCESS FULL        BQSHENG        DEPT        3        3        24
       TABLE ACCESS FULL        BQSHENG        EMP                3        9        135
这个两个语句的执行计划中都有 FILTER这个执行计划。请问下  这个两个FIlter 的作用分别是什么、执行过程是什么样的?

从我个人的理解是: 第一个FIlter是 一种特殊的 nested loop join 就是把起到连接 作用。而第二 个FILTER 是 过滤作用。
过滤掉  emp.rowid 是不为  null 的记录。
但是 我的觉得可能我的理解有些问题, 因为同一个执行计划  怎么可能起到的作用差别这么大呢?

请那位能帮忙分析下。这个FILTER执行计划 到底是怎么运作的吗?  谢谢!





标签: 暂无标签
shengbinqian

写了 3 篇文章,拥有财富 57,被 1 人关注

转播转播 分享分享 分享淘帖
回复

使用道具

P4 | 发表于 2013-9-28 15:14:02
没有人回复   
回复

使用道具

您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

意见
反馈