shengbinqian 发表于 2013-9-28 14:50:33

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

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

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

语句1:
select   *   from dept where   dept.deptno   notin   (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,empwhere 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 发表于 2013-9-28 15:14:02

没有人回复   :'(
页: [1]
查看完整版本: Oracle执行计划中的Filter执行过程请教