此hint仅针对hash_join有效,强行交换驱动关系;目标表为 原hash连接的被驱动表,适合的场景:
1.多表的hash内连接(大于2个以上)
2.多表的hash外连接(大于等于2个以上)

场景1:

--2个表的内连接
select /*+ leading(d) use_hash(e) swap_join_inputs(e)*/  * from dept d,emp ewhere d.deptno=e.deptno;


可以看到,首先d作为驱动表,e被驱动,然后强行反转e;
此情况,没必要用swap_join_inputs,用leading就可以指定了;

场景2

--2个表的外连接
select /*+ leading(e) use_hash(d) */  * from dept d,emp ewhere d.deptno=e.deptno(+);

这里看到,leading失效了,那么可以使用swap_join_inputs(e)强行反转;
select /*+ leading(e) use_hash(d) swap_join_inputs(e)*/  * from dept d,emp ewhere d.deptno=e.deptno(+);

场景3:
多个表的内连接下交换顺序

drop table t1;
drop table t2;
drop table t3;create table t1asselect * from dba_objects where rownum<2;   create table t2asselect * from dba_objects where rownum<12;create table t3asselect * from dba_objects where rownum<22;select  /*+ ordered use_hash(t3)*/t1.owner, t2.data_object_idfrom t2, t3, t1where t2.object_id = t3.object_idand t1.object_id = t3.object_id;
或者
select  /*+ leading(t2) use_hash(t3)*/t1.owner, t2.data_object_idfrom t2, t3, t1where t2.object_id = t3.object_idand t1.object_id = t3.object_id;


如果想反过来,让T1作为第一个驱动表,怎么实现?
–方式1:leading 不对
select /+ leading(t1) use_hash(t2 t3)/
t1.owner, t2.data_object_id
from t2, t3, t1
where t2.object_id = t3.object_id
and t1.object_id = t3.object_id;

这里t2,t3虽然都作为了被驱动,但是顺序不对;

–方式2swap_join_inputs
select /+ leading(t2) use_hash(t3) swap_join_inputs(t1)/
t1.owner, t2.data_object_id
from t2, t3, t1
where t2.object_id = t3.object_id
and t1.object_id = t3.object_id;

这就对了

oracle Swap_join_inputs简析相关推荐

  1. php mysql 命令行模式_MySQL_MYSQL导入导出sql文件简析,一.MYSQL的命令行模式的设置- phpStudy...

    MYSQL导入导出sql文件简析 一.MYSQL的命令行模式的设置 桌面->我的电脑->属性->环境变量->新建-> PATH=":path\mysql\bin ...

  2. 简析金融IT行业发展前景

    金融IT行业是金融和IT的交叉行业,这个行业尚没有明确的定义.本文简析了金融IT行业的特点,探讨了金融IT行业中常见的职位并对金融IT行业的就业前景提出了自己的看法. 一.定义 1.金融和金融行业的定 ...

  3. Android V1及V2签名原理简析

    Android为了保证系统及应用的安全性,在安装APK的时候需要校验包的完整性,同时,对于覆盖安装的场景还要校验新旧是否匹配,这两者都是通过Android签名机制来进行保证的,本文就简单看下Andro ...

  4. Mysql锁机制及原理简析

    Mysql锁机制及原理简析 一.前言 1.什么是锁? 锁是计算机协调多个进程或线程并发访问某一资源的机制. 锁保证数据并发访问的一致性.有效性: 锁冲突也是影响数据库并发访问性能的一个重要因素. 锁是 ...

  5. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析

    目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...

  6. 简析平衡树(三)——浅谈Splay

    前言 原本以为\(Treap\)已经很难了,学习了\(Splay\),我才知道,没有最难,只有更难.(强烈建议先去学一学\(Treap\)再来看这篇博客) 简介 \(Splay\)是平衡树中的一种,除 ...

  7. 基于libmad库的MP3解码简析

    基于libmad库的MP3解码简析  MAD (libmad)是一个开源的高精度 MPEG 音频解码库,支持 MPEG-1(Layer I, Layer II 和 LayerIII(也就是 MP3). ...

  8. 简析 .NET Core 构成体系

    简析 .NET Core 构成体系 Roslyn 编译器 RyuJIT 编译器 CoreCLR & CoreRT CoreFX(.NET Core Libraries) .NET Core 代 ...

  9. Python源码学习:内建类型简析并简析int对象

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> 上一篇文章中已经大致分析了下,Python的启动执行流程,现在我们分析一下Pytho ...

最新文章

  1. SQL Server密码爆破工具SQLdict
  2. matlab simplify,[求助]Matlab2016b里没有simple函数
  3. reload端口 tomcat_tomcat上部署网站的三种方式
  4. java gui容器_[Java教程]GUI Panel 容器以及布局管理器
  5. 马斯克:特斯拉将发布结合太阳能、电池存储技术的新产品
  6. 结对-四则运算答题器-开发环境搭建过程
  7. Java线程基础(二)
  8. 不用邀请照样申请Gmail免费邮箱
  9. Netty系列进阶篇一:阻塞和多路复用到底是个啥?
  10. uniapp获取手机号流程
  11. 查看windows系统许可证过期日期方法
  12. xcode和macos对应版本参考
  13. 软件测试实习——第二十四天
  14. 手机投屏不是全屏怎么办_手机、电脑投屏怎么全屏
  15. 调试工具-DEBUG
  16. Windows构建Flutter环境,无法访问maven.google.com
  17. 2018-2020-Android面试心得,题目精选已拿到offer-,现拿年薪40万
  18. Java 无效的标记_Java--Error:java: 无效的标记: -release
  19. 50道简单家常菜~~~~~让你得意厨房
  20. Acrel-EMS企业微电网能效管理平台在某食品加工厂35kV变电站应用

热门文章

  1. java毕业设计—— 基于java+JSP+SSH的婴幼儿产品销售系统设计与实现(毕业论文+程序源码)——婴幼儿产品销售系统
  2. Linux服务器带宽占用高导致无法登录的处理经验分享
  3. 实验二 单隐层神经网络
  4. ros构建机器人运动学模型_ROS系统玩转自主移动机器人(5)-- ROS系统建模
  5. 饭前一根香蕉,到底有多好!
  6. html5 bdi 不起作用,html bdi标签的使用详解
  7. 银行卡电信诈骗危险预测
  8. acme.sh申请Let‘s encrypt泛域名证书Docker化部署
  9. 智能优化算法之灰狼优化算法(GWO)的实现(Python附源码)
  10. 题目1205 百万富翁问题