15.查询转换之-表移除技术

1.什么是表移除。

表移除是优化器处理带多表连接的目标SQL的一种优化手段,它是指优化器会把虽然在目标
SQL中存在,但是其存在与否对最终执行结果没有影响的表从该目前SQL中移除,这样优化器
至少可以做一次表连接,进而就提高了原目标SQL的执行效率。

表移除技术在Oracle10gR2中就已经被引入了。

2.表移除的案例SQL 

select ename from emp,dept 
where emp.deptno=dept.deptno;

执行计划中只有 EMP表的 TABLE ACCESS FULL,而没有DEPT 表。
说明这里做了表移除。
原因是 EMP和DEPT表在DEPTNO上存在主外键关系。
在做表移除时,oracle的filter(EMP.DEPTNO IS NOT NULL);

alter table emp modify (deptno null);

再次执行,还是做表移除,不过在过滤部分有:filter(EMP.DEPTNO IS NOT NULL);
说明通过过滤非空值做表移除。

表移除不仅适用于表与表之间通过外键关联的情形,还适用于表与表之间是外连接的情形。
例如:
select ename from emp ,dept 
where emp.deptno=detp.deptno(+);
--此SQL会做表移除,只访问表EMP;
--TABLE ACCESS FULL 

表移除在很多情况下还是可以发挥作用的,比如针对于视图的查询,很多系统都用到了视图,
使用视图的一个目的就是对外提供统一的查询接口,开发人员可以不关心视图底层
基表的逻辑和具体结构,只需要查询视图中对应的封装好的列就可以了。这样当查询
由多表关联形成的视图时,表移除也许就会发挥作用了。

create view view_te as 
select emp.empno,emp1.ename,dept.dname 
from emp,emp1,dept 
where emp.empno=emp1.empno 
and emp.deptno=dept.deptno;

当查询由多表关联形成的视图时,Oracle确实会根据查询列的来源以及是否
满足表移除的前提条件来决定是否做表移除。

3.总结

表移除的好处是,虽然是做多表关联,但是只取其中一个表里面的数据。
通过表移除,减少访问表的次数,提升效率。表移除的直观的结果是,
SQL语句中出现该表,但由于SELECT语句没有使用该表的字段,执行计划中也没有
出现该表,未访问该表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值