周末时,近日有网友朋友向我提问,“什么是视图合并?多次看到这个名词,但是每次都是扎入到执行计划中去分析了,但是对这个概念和功能完全不清楚,干啥用的?” 对于这个概念,趁赶着这个问题,自己也好好复习一下。
一.什么是视图合并(View Merging)?
我们通过一个SQL案例来说明,现有如下SQL:
SQL1:
select emp1.empno, emp1.ename, emp1.comm
from emp1,
(select emp.ename, emp.deptno
from emp, dept
where emp.deptno = dept.deptno) a
where emp1.ename = a.ename
执行计划如下:
我们看到,SQ中存在如下的子查询结果集,区别于标量子查询,该子查询是在from 与Where之间的,从执行计划上来看,emp表和dep表进行关联过滤限定后在再EMP1进行最后关联,也就是说如下查询结果集作为一个整体看待,这个比较符合SQL写法的认知逻辑,但是强大的Oracle CBO默认会按照如此的逻辑进行关联么?
select emp.ename, emp.deptno
from emp, dept