oracle外联结无法改变驱动表!
来源:互联网 发布:c语言动态心形代码 编辑:程序博客网 时间:2024/05/17 18:00
SQL> select /*+ leading(e) */ e.*,d.* from emp e,dept d where e.deptno=d.deptno;执行计划----------------------------------------------------------Plan hash value: 1123238657---------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |---------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 14 | 812 | 7 (15)| 00:00:01 ||* 1 | HASH JOIN | | 14 | 812 | 7 (15)| 00:00:01 || 2 | TABLE ACCESS FULL| EMP | 14 | 532 | 3 (0)| 00:00:01 || 3 | TABLE ACCESS FULL| DEPT | 4 | 80 | 3 (0)| 00:00:01 |---------------------------------------------------------------------------Predicate Information (identified by operation id):--------------------------------------------------- 1 - access("E"."DEPTNO"="D"."DEPTNO")SQL> select /*+ leading(d) */ e.*,d.* from emp e,dept d where e.deptno=d.deptno;执行计划----------------------------------------------------------Plan hash value: 844388907----------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |----------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 14 | 812 | 6 (17)| 00:00:01 || 1 | MERGE JOIN | | 14 | 812 | 6 (17)| 00:00:01 || 2 | TABLE ACCESS BY INDEX ROWID| DEPT | 4 | 80 | 2 (0)| 00:00:01 || 3 | INDEX FULL SCAN | PK_DEPT | 4 | | 1 (0)| 00:00:01 ||* 4 | SORT JOIN | | 14 | 532 | 4 (25)| 00:00:01 || 5 | TABLE ACCESS FULL | EMP | 14 | 532 | 3 (0)| 00:00:01 |----------------------------------------------------------------------------------------Predicate Information (identified by operation id):--------------------------------------------------- 4 - access("E"."DEPTNO"="D"."DEPTNO") filter("E"."DEPTNO"="D"."DEPTNO")
上面是一个内联结的执行计划,可以看见可以使用/*+ leading(e) */和/*+ leading(d) */来执行最先访问的表。
SQL> select /*+ leading(e) */ e.*,d.* from emp e,dept d where e.deptno=d.deptno(+);执行计划----------------------------------------------------------Plan hash value: 3387915970---------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |---------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 14 | 812 | 7 (15)| 00:00:01 ||* 1 | HASH JOIN OUTER | | 14 | 812 | 7 (15)| 00:00:01 || 2 | TABLE ACCESS FULL| EMP | 14 | 532 | 3 (0)| 00:00:01 || 3 | TABLE ACCESS FULL| DEPT | 4 | 80 | 3 (0)| 00:00:01 |---------------------------------------------------------------------------Predicate Information (identified by operation id):--------------------------------------------------- 1 - access("E"."DEPTNO"="D"."DEPTNO"(+))SQL> select /*+ leading(d) */ e.*,d.* from emp e,dept d where e.deptno=d.deptno(+);执行计划----------------------------------------------------------Plan hash value: 3387915970---------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |---------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 14 | 812 | 7 (15)| 00:00:01 ||* 1 | HASH JOIN OUTER | | 14 | 812 | 7 (15)| 00:00:01 || 2 | TABLE ACCESS FULL| EMP | 14 | 532 | 3 (0)| 00:00:01 || 3 | TABLE ACCESS FULL| DEPT | 4 | 80 | 3 (0)| 00:00:01 |---------------------------------------------------------------------------Predicate Information (identified by operation id):--------------------------------------------------- 1 - access("E"."DEPTNO"="D"."DEPTNO"(+))
上面是一个外联结,其中第一行的“OUTER”表明这个是一个外联结,可以看见使用/*+ leading(e) */和/*+ leading(d) */都不能改变执行计划的驱动表(emp)!
SQL> select e.*,d.* from dept d,emp e where e.deptno=d.deptno(+);执行计划----------------------------------------------------------Plan hash value: 3387915970---------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |---------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 14 | 812 | 7 (15)| 00:00:01 ||* 1 | HASH JOIN OUTER | | 14 | 812 | 7 (15)| 00:00:01 || 2 | TABLE ACCESS FULL| EMP | 14 | 532 | 3 (0)| 00:00:01 || 3 | TABLE ACCESS FULL| DEPT | 4 | 80 | 3 (0)| 00:00:01 |---------------------------------------------------------------------------Predicate Information (identified by operation id):--------------------------------------------------- 1 - access("E"."DEPTNO"="D"."DEPTNO"(+))
可以看见改变from后面的表顺序,驱动表还是emp!
SQL> select e.*,d.* from emp e,dept d where e.deptno(+)=d.deptno;执行计划----------------------------------------------------------Plan hash value: 2251696546----------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |----------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 14 | 812 | 6 (17)| 00:00:01 || 1 | MERGE JOIN OUTER | | 14 | 812 | 6 (17)| 00:00:01 || 2 | TABLE ACCESS BY INDEX ROWID| DEPT | 4 | 80 | 2 (0)| 00:00:01 || 3 | INDEX FULL SCAN | PK_DEPT | 4 | | 1 (0)| 00:00:01 ||* 4 | SORT JOIN | | 14 | 532 | 4 (25)| 00:00:01 || 5 | TABLE ACCESS FULL | EMP | 14 | 532 | 3 (0)| 00:00:01 |----------------------------------------------------------------------------------------Predicate Information (identified by operation id):--------------------------------------------------- 4 - access("E"."DEPTNO"(+)="D"."DEPTNO") filter("E"."DEPTNO"(+)="D"."DEPTNO")
把左外联结改为右外联结,驱动表就改变了(dept)。规律就是:左外联结,驱动表就是左边表。右外联结,驱动表就是右边的表。
SQL> select e.*,d.* from emp e full join dept d on e.deptno=d.deptno;执行计划----------------------------------------------------------Plan hash value: 51889263----------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |----------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 15 | 1755 | 7 (15)| 00:00:01 || 1 | VIEW | VW_FOJ_0 | 15 | 1755 | 7 (15)| 00:00:01 ||* 2 | HASH JOIN FULL OUTER| | 15 | 870 | 7 (15)| 00:00:01 || 3 | TABLE ACCESS FULL | DEPT | 4 | 80 | 3 (0)| 00:00:01 || 4 | TABLE ACCESS FULL | EMP | 14 | 532 | 3 (0)| 00:00:01 |----------------------------------------------------------------------------------Predicate Information (identified by operation id):--------------------------------------------------- 2 - access("E"."DEPTNO"="D"."DEPTNO")
可以看见第二行的“FULL OUTER”指明这是一个全外联结!
- oracle外联结无法改变驱动表!
- oracle 外联结
- 主从表外联结查询
- oracle 全外联接
- Oracle内联,外联
- 反连接走NL时无法改变驱动表
- Oracle优化——外联结的执行计划
- Oracle数据库-关于外联接
- oracle 数据库外联 join (+)
- oracle 全外联接,急
- 内联结和外联结
- 由于 ip 改变,导致 oracle dbconsole 无法启动,解决方法如下:
- 由于 ip 改变,导致 oracle dbconsole 无法启动
- linux系统IP改变后oracle监听无法启动
- linux系统IP改变后oracle监听无法启动
- 多表查询,左外联结,唯一条件,有的表数据为null
- 内连接和外联结的区别
- Mysql 内联结与外联结
- linux 内存释放
- 交叉编译器arm-linux-gcc-4.4.3安装
- JAVA_OPTS设置
- android的选项菜单的实现
- 【转】hibernate 的createSQLQuery的几种用法(转)
- oracle外联结无法改变驱动表!
- U大师U盘启动盘制作教程 详细图解步骤教你怎么装系统(老机版)
- 从空间角度谈移动界面扩展
- 深入Memcache内部(二)-item内存分配
- java 虚拟机启动参数
- PHP最佳实践
- linux学习笔记6
- synchronized详解
- 快速求一个32位无符号整数二进制中为1的个数