[20200718]注意sql hint写法2.txt --//更正链接http://blog.itpub.net/267265/viewspace-2642961/的错误. 1.环境: SCOTT@test01p> @ ver1 PORT_STRING VERSION BANNER CON_ID ------------------------------ -------------- -------------------------------------------------------------------------------- ---------- IBMPC/WIN_NT64-9.1.0 12.2.0.1.0 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 0 2.测试: SCOTT@test01p> select /*+ use_nl(emp ) */ * from dept ,emp where dept.deptno=emp.deptno; SCOTT@test01p> @ dpc '' '' PLAN_TABLE_OUTPUT ------------------------------------- SQL_ID f6v18db4wf38v, child number 0 ------------------------------------- select /*+ use_nl(emp ) */ * from dept ,emp where dept.deptno=emp.deptno Plan hash value: 1123238657 ------------------------------------------------------------------------------------------------------- | Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time | OMem | 1Mem | Used-Mem | ------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 6 (100)| | | | | |* 1 | HASH JOIN | | 14 | 812 | 6 (0)| 00:00:01 | 1055K| 1055K| 719K (0)| | 2 | TABLE ACCESS FULL| EMP | 14 | 532 | 3 (0)| 00:00:01 | | | | | 3 | TABLE ACCESS FULL| DEPT | 4 | 80 | 3 (0)| 00:00:01 | | | | ------------------------------------------------------------------------------------------------------- Query Block Name / Object Alias (identified by operation id): ------------------------------------------------------------- 1 - SEL$1 2 - SEL$1 / EMP@SEL$1 3 - SEL$1 / DEPT@SEL$1 Predicate Information (identified by operation id): --------------------------------------------------- 1 - access("DEPT"."DEPTNO"="EMP"."DEPTNO") --//emp作为驱动表,但是连接不是nested loop,而是hash join.应该写成如下: SCOTT@test01p> select /*+ use_nl(emp dept) */ * from dept ,emp where dept.deptno=emp.deptno; SCOTT@test01p> @ dpc '' '' PLAN_TABLE_OUTPUT ------------------------------------- SQL_ID gk5d852xxj4b5, child number 0 ------------------------------------- select /*+ use_nl(emp dept) */ * from dept ,emp where dept.deptno=emp.deptno Plan hash value: 4192419542 ---------------------------------------------------------------------------- | Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time | ---------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 10 (100)| | | 1 | NESTED LOOPS | | 14 | 812 | 10 (0)| 00:00:01 | | 2 | TABLE ACCESS FULL| DEPT | 4 | 80 | 3 (0)| 00:00:01 | |* 3 | TABLE ACCESS FULL| EMP | 4 | 152 | 2 (0)| 00:00:01 | ---------------------------------------------------------------------------- Query Block Name / Object Alias (identified by operation id): ------------------------------------------------------------- 1 - SEL$1 2 - SEL$1 / DEPT@SEL$1 3 - SEL$1 / EMP@SEL$1 Predicate Information (identified by operation id): --------------------------------------------------- 3 - filter("DEPT"."DEPTNO"="EMP"."DEPTNO") --//这样写才是走nested loop.但是连接顺序是dept在前,emp在后. select /*+ use_nl(dept emp ) */ * from dept ,emp where dept.deptno=emp.deptno; SCOTT@test01p> @ dpc '' '' PLAN_TABLE_OUTPUT ------------------------------------- SQL_ID 3t7v5jv2dwbpj, child number 0 ------------------------------------- select /*+ use_nl(dept emp ) */ * from dept ,emp where dept.deptno=emp.deptno Plan hash value: 4192419542 ---------------------------------------------------------------------------- | Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time | ---------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 10 (100)| | | 1 | NESTED LOOPS | | 14 | 812 | 10 (0)| 00:00:01 | | 2 | TABLE ACCESS FULL| DEPT | 4 | 80 | 3 (0)| 00:00:01 | |* 3 | TABLE ACCESS FULL| EMP | 4 | 152 | 2 (0)| 00:00:01 | ---------------------------------------------------------------------------- --//连接顺序是dept在前,emp在后.也就是要控制连接顺序必须使用leadiing或者order提示. select /*+ leading(emp dept ) use_nl(dept emp ) */ * from dept ,emp where dept.deptno=emp.deptno; SCOTT@test01p> @ dpc '' advanced PLAN_TABLE_OUTPUT ------------------------------------- SQL_ID 0nvmx1zbbdvbt, child number 0 ------------------------------------- select /*+ leading(emp dept ) use_nl(dept emp ) */ * from dept ,emp where dept.deptno=emp.deptno Plan hash value: 3625962092 ----------------------------------------------------------------------------------------- | Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time | ----------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 17 (100)| | | 1 | NESTED LOOPS | | 14 | 812 | 17 (0)| 00:00:01 | | 2 | NESTED LOOPS | | 14 | 812 | 17 (0)| 00:00:01 | | 3 | TABLE ACCESS FULL | EMP | 14 | 532 | 3 (0)| 00:00:01 | |* 4 | INDEX UNIQUE SCAN | PK_DEPT | 1 | | 0 (0)| | | 5 | TABLE ACCESS BY INDEX ROWID| DEPT | 1 | 20 | 1 (0)| 00:00:01 | ----------------------------------------------------------------------------------------- select /*+ leading(dept emp ) use_nl(dept emp ) */ * from dept ,emp where dept.deptno=emp.deptno; SCOTT@test01p> @ dpc '' advanced PLAN_TABLE_OUTPUT ------------------------------------- SQL_ID cfc054wzj13c1, child number 0 ------------------------------------- select /*+ leading(dept emp ) use_nl(dept emp ) */ * from dept ,emp where dept.deptno=emp.deptno Plan hash value: 4192419542 ---------------------------------------------------------------------------- | Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time | ---------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 10 (100)| | | 1 | NESTED LOOPS | | 14 | 812 | 10 (0)| 00:00:01 | | 2 | TABLE ACCESS FULL| DEPT | 4 | 80 | 3 (0)| 00:00:01 | |* 3 | TABLE ACCESS FULL| EMP | 4 | 152 | 2 (0)| 00:00:01 | ---------------------------------------------------------------------------- 3.走hash join以及merge join也存在类似的情况? SCOTT@test01p> select /*+ use_hash( emp dept) */ * from dept ,emp where dept.deptno=emp.deptno; SCOTT@test01p> @ dpc '' '' PLAN_TABLE_OUTPUT ------------------------------------- SQL_ID 82kkvfn2wfm9u, child number 0 ------------------------------------- select /*+ use_hash( emp dept) */ * from dept ,emp where dept.deptno=emp.deptno Plan hash value: 615168685 ------------------------------------------------------------------------------------------------------- | Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time | OMem | 1Mem | Used-Mem | ------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 6 (100)| | | | | |* 1 | HASH JOIN | | 14 | 812 | 6 (0)| 00:00:01 | 1398K| 1398K| 1056K (0)| | 2 | TABLE ACCESS FULL| DEPT | 4 | 80 | 3 (0)| 00:00:01 | | | | | 3 | TABLE ACCESS FULL| EMP | 14 | 532 | 3 (0)| 00:00:01 | | | | ------------------------------------------------------------------------------------------------------- SCOTT@test01p> select /*+ leading(emp dept) use_hash( emp dept) */ * from dept ,emp where dept.deptno=emp.deptno; SCOTT@test01p> @ dpc '' '' PLAN_TABLE_OUTPUT ------------------------------------- SQL_ID 4uwf6gq3vqwt6, child number 0 ------------------------------------- select /*+ leading(emp dept) use_hash( emp dept) */ * from dept ,emp where dept.deptno=emp.deptno Plan hash value: 1123238657 ------------------------------------------------------------------------------------------------------- | Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time | OMem | 1Mem | Used-Mem | ------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 6 (100)| | | | | |* 1 | HASH JOIN | | 14 | 812 | 6 (0)| 00:00:01 | 1098K| 1098K| 699K (0)| | 2 | TABLE ACCESS FULL| EMP | 14 | 532 | 3 (0)| 00:00:01 | | | | | 3 | TABLE ACCESS FULL| DEPT | 4 | 80 | 3 (0)| 00:00:01 | | | | ------------------------------------------------------------------------------------------------------- SCOTT@test01p> select /*+ leading(emp dept) use_merge( emp dept) */ * from dept ,emp where dept.deptno=emp.deptno; SCOTT@test01p> @ dpc '' '' PLAN_TABLE_OUTPUT ------------------------------------- SQL_ID a1933csmkkyd3, child number 0 ------------------------------------- select /*+ leading(emp dept) use_merge( emp dept) */ * from dept ,emp where dept.deptno=emp.deptno Plan hash value: 3406566467 -------------------------------------------------------------------------------------------------------- | Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time | OMem | 1Mem | Used-Mem | -------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 8 (100)| | | | | | 1 | MERGE JOIN | | 14 | 812 | 8 (25)| 00:00:01 | | | | | 2 | SORT JOIN | | 14 | 532 | 4 (25)| 00:00:01 | 2048 | 2048 | 2048 (0)| | 3 | TABLE ACCESS FULL| EMP | 14 | 532 | 3 (0)| 00:00:01 | | | | |* 4 | SORT JOIN | | 4 | 80 | 4 (25)| 00:00:01 | 2048 | 2048 | 2048 (0)| | 5 | TABLE ACCESS FULL| DEPT | 4 | 80 | 3 (0)| 00:00:01 | | | | -------------------------------------------------------------------------------------------------------- SCOTT@test01p> select /*+ leading( dept emp) use_merge( emp dept) */ * from dept ,emp where dept.deptno=emp.deptno; SCOTT@test01p> @ dpc '' '' PLAN_TABLE_OUTPUT ------------------------------------- SQL_ID 3jz1v9y326xvp, child number 0 ------------------------------------- select /*+ leading( dept emp) use_merge( emp dept) */ * from dept ,emp where dept.deptno=emp.deptno Plan hash value: 844388907 -------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time | OMem | 1Mem | Used-Mem | -------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 6 (100)| | | | | | 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 | 2048 | 2048 | 2048 (0)| | 5 | TABLE ACCESS FULL | EMP | 14 | 532 | 3 (0)| 00:00:01 | | | | -------------------------------------------------------------------------------------------------------------------- 4.总结: --//实际上在链接还做了一些例子: --//http://blog.itpub.net/267265/viewspace-2122782/=>[20160730]hint 冲突.txt --//这种细节问题总是不小心就会犯. --//总之要控制执行计划,最好使用leading,use_nl()里面的表如果仅仅1个参数作为被驱动表才有效. --//不行加入2个参数.避免执行计划与提示冲突.
[20200718]注意sql hint写法2.txt
来源:这里教程网
时间:2026-03-03 15:58:38
作者:
编辑推荐:
- [20200718]注意sql hint写法2.txt03-03
- ROTEK S036-L_50-W0250-0103-03
- 12cRAC打补丁后PDB进入受限模式03-03
- Oracle ASM磁盘组扩容03-03
- Oracle ASM磁盘检索路径03-03
- Oracle 实例和RAC集群下数据库日志目录合集03-03
- RAC节点hang住, oracle bug导致了cpu过高,无法启动集群隔离03-03
- Oracle 12c 两个新特性03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 12cRAC打补丁后PDB进入受限模式
12cRAC打补丁后PDB进入受限模式
26-03-03 - Oracle紧急固定执行计划之手段
Oracle紧急固定执行计划之手段
26-03-03 - 外键无索引对数据库的影响以及增加索引后的效果
外键无索引对数据库的影响以及增加索引后的效果
26-03-03 - 19c rac数据库如何添加mgmt
19c rac数据库如何添加mgmt
26-03-03 - 质量内建七步法(转载)
质量内建七步法(转载)
26-03-03 - 微信小程序怎么做
微信小程序怎么做
26-03-03 - Oracle RMAN备份实战
Oracle RMAN备份实战
26-03-03 - oracle19c对数据库客户端和jdbc版本要求
oracle19c对数据库客户端和jdbc版本要求
26-03-03 - ORA-00904: "wm_concat":invalid identifier错误如何解决?
- 都有哪些好用的项目管理工具?
都有哪些好用的项目管理工具?
26-03-03
