[20260215]关于连接提示.txt --//再次提醒自己,连接提示仅仅写1个表。 1.环境: SCOTT@book01p> @ ver2 ============================== PORT_STRING : x86_64/Linux 2.4.xx VERSION : 21.0.0.0.0 BANNER : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production BANNER_FULL : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production Version 21.3.0.0.0 BANNER_LEGACY : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production CON_ID : 0 PL/SQL procedure successfully completed. 2.测试: SCOTT@book01p> SELECT /*+ USE_NL(emp,dept) */ ename,dname FROM emp,dept WHERE emp.deptno = dept.deptno; ENAME DNAME ---------- ------------------------------ CLARK ACCOUNTING KING ACCOUNTING MILLER ACCOUNTING SMITH RESEARCH JONES RESEARCH SCOTT RESEARCH ADAMS RESEARCH FORD RESEARCH ALLEN SALES WARD SALES MARTIN SALES BLAKE SALES TURNER SALES JAMES SALES 14 rows selected. SCOTT@book01p> @ dpc '' outline '' PLAN_TABLE_OUTPUT ------------------------------------- SQL_ID 8padkbhdmrdwa, child number 0 ------------------------------------- SELECT /*+ USE_NL(emp,dept) */ ename,dname FROM emp,dept WHERE emp.deptno = dept.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 | 308 | 10 (0)| 00:00:01 | | 2 | TABLE ACCESS FULL| DEPT | 4 | 52 | 3 (0)| 00:00:01 | |* 3 | TABLE ACCESS FULL| EMP | 4 | 36 | 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" Outline Data ------------- /*+ BEGIN_OUTLINE_DATA IGNORE_OPTIM_EMBEDDED_HINTS OPTIMIZER_FEATURES_ENABLE('21.1.0') DB_VERSION('21.1.0') ALL_ROWS OUTLINE_LEAF(@"SEL$1") FULL(@"SEL$1" "DEPT"@"SEL$1") FULL(@"SEL$1" "EMP"@"SEL$1") LEADING(@"SEL$1" "DEPT"@"SEL$1" "EMP"@"SEL$1") USE_NL(@"SEL$1" "EMP"@"SEL$1") END_OUTLINE_DATA */ Predicate Information (identified by operation id): --------------------------------------------------- 3 - filter("EMP"."DEPTNO"="DEPT"."DEPTNO") Hint Report (identified by operation id / Query Block Name / Object Alias): Total hints for statement: 2 (U - Unused (1)) --------------------------------------------------------------------------- 2 - SEL$1 / "DEPT"@"SEL$1" U - USE_NL(emp,dept) 3 - SEL$1 / "EMP"@"SEL$1" - USE_NL(emp,dept) Note ----- - Warning: basic plan statistics not available. These are only collected when: * hint 'gather_plan_statistics' is used for the statement or * parameter 'statistics_level' is set to 'ALL', at session or system level 61 rows selected. --//注意看提示部分。有1个错误,最好不要这样写。 --//采用leading + use_NL最佳 SELECT /*+ leading(dept emp ) USE_NL(emp) */ ename,dname FROM emp,dept WHERE emp.deptno = dept.deptno; SCOTT@book01p> @ dpc '' outline '' PLAN_TABLE_OUTPUT ------------------------------------- SQL_ID btb316jp7m1bz, child number 0 ------------------------------------- SELECT /*+ leading(dept emp ) USE_NL(emp) */ ename,dname FROM emp,dept WHERE emp.deptno = dept.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 | 308 | 10 (0)| 00:00:01 | | 2 | TABLE ACCESS FULL| DEPT | 4 | 52 | 3 (0)| 00:00:01 | |* 3 | TABLE ACCESS FULL| EMP | 4 | 36 | 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" Outline Data ------------- /*+ BEGIN_OUTLINE_DATA IGNORE_OPTIM_EMBEDDED_HINTS OPTIMIZER_FEATURES_ENABLE('21.1.0') DB_VERSION('21.1.0') ALL_ROWS OUTLINE_LEAF(@"SEL$1") FULL(@"SEL$1" "DEPT"@"SEL$1") FULL(@"SEL$1" "EMP"@"SEL$1") LEADING(@"SEL$1" "DEPT"@"SEL$1" "EMP"@"SEL$1") USE_NL(@"SEL$1" "EMP"@"SEL$1") END_OUTLINE_DATA */ Predicate Information (identified by operation id): --------------------------------------------------- 3 - filter("EMP"."DEPTNO"="DEPT"."DEPTNO") Hint Report (identified by operation id / Query Block Name / Object Alias): Total hints for statement: 2 --------------------------------------------------------------------------- 1 - SEL$1 - leading(dept emp ) 3 - SEL$1 / "EMP"@"SEL$1" - USE_NL(emp) Note ----- - Warning: basic plan statistics not available. These are only collected when: * hint 'gather_plan_statistics' is used for the statement or * parameter 'statistics_level' is set to 'ALL', at session or system level --//如果写成如下,执行计划并不选择nested loop。 SELECT /*+ USE_NL(emp) */ ename,dname FROM emp,dept WHERE emp.deptno = dept.deptno; SCOTT@book01p> @ dpc '' outline,adaptive '' PLAN_TABLE_OUTPUT ------------------------------------- SQL_ID 9v2us3kvdfj50, child number 0 ------------------------------------- SELECT /*+ USE_NL(emp) */ ename,dname FROM emp,dept WHERE emp.deptno = dept.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 | 308 | 6 (0)| 00:00:01 | 1744K| 1744K| 949K (0)| |- 2 | NESTED LOOPS | | 14 | 308 | 6 (0)| 00:00:01 | | | | |- 3 | NESTED LOOPS | | | | | | | | | |- 4 | STATISTICS COLLECTOR | | | | | | | | | | 5 | TABLE ACCESS FULL | EMP | 14 | 126 | 3 (0)| 00:00:01 | | | | |- * 6 | INDEX UNIQUE SCAN | PK_DEPT | | | | | | | | |- 7 | TABLE ACCESS BY INDEX ROWID| DEPT | 1 | 13 | 3 (0)| 00:00:01 | | | | | 8 | TABLE ACCESS FULL | DEPT | 4 | 52 | 3 (0)| 00:00:01 | | | | ----------------------------------------------------------------------------------------------------------------------- Query Block Name / Object Alias (identified by operation id): ------------------------------------------------------------- 1 - SEL$1 2 - SEL$1 5 - SEL$1 / "EMP"@"SEL$1" 6 - SEL$1 / "DEPT"@"SEL$1" 7 - SEL$1 / "DEPT"@"SEL$1" 8 - SEL$1 / "DEPT"@"SEL$1" Outline Data ------------- /*+ BEGIN_OUTLINE_DATA IGNORE_OPTIM_EMBEDDED_HINTS OPTIMIZER_FEATURES_ENABLE('21.1.0') DB_VERSION('21.1.0') ALL_ROWS OUTLINE_LEAF(@"SEL$1") FULL(@"SEL$1" "EMP"@"SEL$1") FULL(@"SEL$1" "DEPT"@"SEL$1") LEADING(@"SEL$1" "EMP"@"SEL$1" "DEPT"@"SEL$1") USE_HASH(@"SEL$1" "DEPT"@"SEL$1") END_OUTLINE_DATA */ Predicate Information (identified by operation id): --------------------------------------------------- 1 - access("EMP"."DEPTNO"="DEPT"."DEPTNO") 6 - access("EMP"."DEPTNO"="DEPT"."DEPTNO") Hint Report (identified by operation id / Query Block Name / Object Alias): Total hints for statement: 1 (U - Unused (1)) --------------------------------------------------------------------------- 5 - SEL$1 / "EMP"@"SEL$1" U - USE_NL(emp) Note ----- - this is an adaptive plan (rows marked '-' are inactive) - Warning: basic plan statistics not available. These are only collected when: * hint 'gather_plan_statistics' is used for the statement or * parameter 'statistics_level' is set to 'ALL', at session or system level 68 rows selected. --//由于adaptive plan 存在,选择hash join连接。可以在11g下测试也是选择hash join,21c加入Hint Report,还很容易看出问题在 --//那里,以前的版本就没有这么幸运了。 --//总之,最佳的方式加入leading + use_nl,use_nl里面的表选择被驱动表。 --//有时候优化加提示没有注意这些细节,浪费不必要的时间。
[20260215]关于连接提示.txt
来源:这里教程网
时间:2026-03-03 23:30:23
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 跃出屏幕,拥抱AI,爱奇艺的自洽与升维
跃出屏幕,拥抱AI,爱奇艺的自洽与升维
26-03-03 - 【MATLAB源码】OTFS/OCDM/AFDM:高机动 NTN 均衡对比仿真平台
- MySQL、Oracle数据库容器部署完整版指南(可直接复制)
MySQL、Oracle数据库容器部署完整版指南(可直接复制)
26-03-03 - 持续推进供需规模增长,瑞幸2025门店与用户基数实现双突破
持续推进供需规模增长,瑞幸2025门店与用户基数实现双突破
26-03-03 - 记一次 Oracle 备份任务自动终止案例分析
记一次 Oracle 备份任务自动终止案例分析
26-03-03 - 记几种手工推进 Oracle SCN 的操作方法案例分析
记几种手工推进 Oracle SCN 的操作方法案例分析
26-03-03 - Oracle Redo 误删数据库强制打开案例分析(上)
Oracle Redo 误删数据库强制打开案例分析(上)
26-03-03 - 数据库数据恢复—ASM问题下Oracle数据如何恢复?
数据库数据恢复—ASM问题下Oracle数据如何恢复?
26-03-03 - 记一次 ora.net1.network 掩码问题导致 RFS 传输失败案例分析
- 记一次 Windows 上安装 Oracle 19c 向导卡顿案例分析
记一次 Windows 上安装 Oracle 19c 向导卡顿案例分析
26-03-03
