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执行计划 到底是怎么运作的吗?谢谢!
没有人回复 :'(
页:
[1]