use_nl (table1,table2....) 指示指定表作为inner table,如果指定的表已经作为了outer table(驱动表),那么优化器会忽略

use_nl 提示,如果非要强制它作为inner table ,可以与ordered 提示一起使用。

下面以SCOTT测试用户作为试验

SQL> select table_name,last_analyzed from user_tables;

TABLE_NAME                     LAST_ANALYZED
------------------------------ --------------
DEPT                           01-12月-09
EMP                            01-12月-09
BONUS                          01-12月-09
SALGRADE                       01-12月-09

表已经分析过了

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

已选择14行。

执行计划
----------------------------------------------------------
Plan hash value: 3074306753

------------------------------------------------------------------------------
| Id  | Operation          | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |         |    14 |   168 |     3   (0)| 00:00:01 |
|   1 |  NESTED LOOPS      |         |    14 |   168 |     3   (0)| 00:00:01 |
|   2 |   TABLE ACCESS FULL| EMP     |    14 |   126 |     3   (0)| 00:00:01 |
|*  3 |   INDEX UNIQUE SCAN| PK_DEPT |     1 |     3 |     0   (0)| 00:00:01 |
------------------------------------------------------------------------------

此处优化器选择emp作为驱动表(outer table),因为dept上有索引,而且索引正好建在连接列上,可见优化器选择是正确的

SQL> select /*+ use_nl(emp) */ ename,dept.deptno from dept,emp where dept.deptno=emp.deptno;

已选择14行。

执行计划
----------------------------------------------------------
Plan hash value: 3074306753

------------------------------------------------------------------------------
| Id  | Operation          | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |         |    14 |   168 |     3   (0)| 00:00:01 |
|   1 |  NESTED LOOPS      |         |    14 |   168 |     3   (0)| 00:00:01 |
|   2 |   TABLE ACCESS FULL| EMP     |    14 |   126 |     3   (0)| 00:00:01 |
|*  3 |   INDEX UNIQUE SCAN| PK_DEPT |     1 |     3 |     0   (0)| 00:00:01 |
------------------------------------------------------------------------------

由于emp作为outer table,优化器忽略use_nl提示

SQL> select /*+ ordered use_nl(emp) */ ename,dept.deptno from dept,emp where dept.deptno=emp.deptno;

已选择14行。

执行计划
----------------------------------------------------------
Plan hash value: 3566768842

------------------------------------------------------------------------------
| Id  | Operation          | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |         |    14 |   168 |     7   (0)| 00:00:01 |
|   1 |  NESTED LOOPS      |         |    14 |   168 |     7   (0)| 00:00:01 |
|   2 |   INDEX FULL SCAN  | PK_DEPT |     4 |    12 |     1   (0)| 00:00:01 |
|*  3 |   TABLE ACCESS FULL| EMP     |     4 |    36 |     2   (0)| 00:00:01 |
------------------------------------------------------------------------------

可见,现在dept作为了驱动表

oracle里use_nl的简单用法相关推荐

  1. oracle sql plus 安装教程视频教程,oracle 安装与SQLPLUS简单用法

    一 安装oracle数据库成功之后,会显示相关的数据库信息: 全局数据库名:oracle 系统标识符(SID):oracle 服务器参数文件名:c:\oracle\product\10.2.0\db_ ...

  2. oracle的substr函数用法,Oracle的substr函数简单用法详解

    substr(字符串,截取开始位置,截取长度) //返回截取的字 substr('Hello World',0,1) //返回结果为 'H'  *从字符串第一个字符开始截取长度为1的字符串 subst ...

  3. 21-while里的break简单用法

    break是结束循环,break之后.循环体内代码不再执行. while True:yn = input('Continue(y/n): ')if yn in ['n','N']:breakprint ...

  4. html.renderaction 控制器,Html.RenderAction简单用法

    CATransition(os开发之画面切换) 的简单用法 CATransition 的简单用法 //引进CATransition 时要添加包"QuartzCore.framework&qu ...

  5. java中instr函数_Oracle的substr和instr函数简单用法

    Oracle的substr函数简单用法 substr(字符串,截取开始位置,截取长度) //返回截取的字 substr('Hello World',0,1) //返回结果为 'H'  *从字符串第一个 ...

  6. Java里try catch的简单用法

    Java里try catch的简单用法: Java里try catch的简单用法: 1.try+catch 程序的流程是:运行到try块中,如果有异常抛出,则转到catch块去处理.然后执行catch ...

  7. java中 try用法,Java里try catch的简单用法

    优质回答 回答者:temps1991 Java里try catch的简单用法: 1.try+catch 程序的流程是:运行到try块中,如果有异常抛出,则转到catch块去处理.然后执行catch块后 ...

  8. oracle pivot使用方法,Oracle Pivot简单用法

    因为工作中经常需要excel或者报表输出,了解到pivot函数,查了部分资料,实在不够详尽,便想自己写一篇.pivot了解不深,只写写简单用法. table t{ c1,c2,c3,c4 } 有库表t ...

  9. bulk怎么使用oracle,oracle学习之bulk collect用法

    通过bulk collect减少loop处理的开销,使用Bulk Collect提高Oracle查询效率 Oracle8i中首次引入了Bulk Collect特性,该特性可以让我们在PL/SQL中能使 ...

最新文章

  1. 对gitShell的使用
  2. HDU 1176 免费馅饼 矩阵取数, dp + 滚动数组
  3. 这门国产编程语言,确实很棒!
  4. ASP.NET 2.0 Club Web Site Starter Kit 补丁
  5. pat1111-1120
  6. mysql删除记录后id不连续_小水玩转Mysql---Mysql跟踪sql记录
  7. Spring Boot返回的数据格式是XML 而不是JSON之原因探求的和解决
  8. 又有好奇心,又能自主学习,这个机器人棒棒哒!
  9. insert 语句的选择列表包含的项多于插入列表中的项_30 种 MySQL 常用 SQL 查询语句优化方法...
  10. 【Neo4j】第 1 章:图数据库
  11. 一点浩然气,千里快哉风
  12. 为什么tumblr起作用
  13. 2013年总结-托福备考,减肥成功,微软实习,VMware工作,硕士毕业
  14. dns被劫持怎么办,什么是dns劫持,有什么方法处理?
  15. 学习OpenCV3:在空白图片上画虚线
  16. JwtToken介绍与使用 超详细保姆级教程 内附详细示例代码
  17. 基于motion视频捕捉软件的树莓派视频拍照系统(图像变化识别+拍照+邮件)
  18. netlify 部署 github page, 使用https域名
  19. Office课程习题
  20. 对象(构造函数)和类(class)

热门文章

  1. 接口大师v3.8.0版本更新,首页改版+组合套餐+微信登录+独立App
  2. MATLAB 模型自动化测试
  3. 聚观早报 | 苹果已开始录制秋季发布会;谷歌将推出高端折叠手机
  4. 计算全国组织机构代码的校验码(C++)
  5. 6,虚拟机的复制与克隆总结
  6. Flask扩展包安装出现错误:Could not find a version that satisfies the requirement ...
  7. 荧光灯泡换LED灯泡指南
  8. 边缘计算与雾计算的区别
  9. (转)火溶CEO王伟峰:Unity3D手机网游开发
  10. 鼠标右键弹出快捷菜单的实现