易截截图软件、单文件、免安装、纯绿色、仅160KB

oracle hint中ordered 和leading原理很好的帖子

问题:请教HINT写法
我有一个SQL添加如下hint,目的是指定hash_join方式。
select /*+ordered use_hash(a,b,c,d) */ *
from a,b,c,d
Where ...
其中,
      a只与b有关联关系,b只与c有关联关系,b只与c有关联关系,c只与d有关联关系,
    数量级:a:1000条,  b:100 万条, c:800万条 , d:100万条
执行计划为:
Hash Join
   ---Hash Join
       -----  Hash Join
               ------  a
               -----    b
       -----  c
   ---d
考虑到d表比较小,我能不能做到将d表作为驱动表、而a,b,c关联之后的结果作为prob外表呢,
通过Ordered好像是没有办法控制这样,加了就只能是a作为驱动表装载内存,b作为prob表与之关联,
之后的结果再作为驱动表,以此类推。
用Leading可以吗?请给出语法,谢谢。
 
解答:
 
oracle 10g中
hash_join可以通过no_swap_join_inputs/swap_join_inputs来强制控制build表,配合leading或者ordered可以控制多表之前的连接顺序。
比如t1,t2,t3,t4共4张表做hash_join
可以通过ordered+no_swap_join_inputs/swap_join_inputs来实现。
比如
如果想实现
( T3 hash-join (T1 hash-join T2)) hash-join T4
t1作为build表和T2做hash_join,然后t3作为build表和t1,t2的结果集作hash_join,在把t3,t1,t2的结果集作build表和t4做hash_join
通过sql可以写为
MYDB@MYDB10G >select
  2  /*+
  3  ordered
  4  use_hash(t2)
  5  use_hash(t3)
  6  swap_join_inputs(t3)
  7  use_hash(t4)
  8  no_swap_join_inputs(t4)
  9  */
10  * from t1,t2,t3,t4
11  where t1.object_id=t2.object_id
12  and t2.object_name=t3.object_name
13  and t3.owner=t4.owner
14  and t4.owner='MYDB'
15  /
已用时间:  00: 00: 00.07
执行计划
------------------


相关文档:

关于Oracle事务的总结

关于Oracle事务的总结
1.什么是事务,事务的特性是什么?
事务的任务便是使数据库从一种状态变换成为另一种状态,这不同于文件系统,它是数据库所特用的。它的特性有四个:TOM总结为ACID即
原子性atomicity:语句级原子性,过程级原子性,事务级原子性
一致性consistency:状态一致,同一事务中不会有两种状态
隔离性iso ......

关于Oracle在AIX平台实施的 培训内容安排

《oracle大型数据库系统在AIX/unix上的实战详解》讨论38    关于Oracle在AIX上实施培训的内容安排   这段时间由于一直忙于项目,也就疏于在日志上和读者的互动,因此又积攒下若干读者来信未回,实在抱歉。其中有几封是关于Oracle在AIX上实施培训的,要求我对培训内容给与解释和说明。这里我做统一说 ......

Oracle Data Gurad Physical Standby 相关说明


Oracle Data Guard, 分逻辑Standby和物理Standby。 下面讲的是物理Standby 环境的搭建步骤。 有关Data Guard的一些概念性的理论知识,请参考我的blog, 这里不做过多的说明。
Oracle Data Gurad 理论知识
http://blog.csdn.net/tianlesoftware/archive/2010/04 ......

oracle在linux下怎么安装

red hat linux 下安装 oracle 10g
racle考资料:
Oracle官方网站: http://download.oracle.com/docs/html/B10813_01/toc.htm
一、以root用户登录, 进行如下操作:
1 检查硬件要求
* 主要包括:
********************************************************************
* 内存:      & ......

ORACLE DSI 介绍

DSI是Data Server
Internals的缩写,是Oracle公司内部用来培训Oracle售后工程师使用的教材.由于某种原因流落江湖,
受到众多Oracle爱好者的追捧, 不过要是功力不到, 阅读反而无益. DSI3是Oracle 8系列的, DSI4是Oracle 9系列的.
这样的文档上通常都印着:Oracle Confidential:For internal Use Only.
DSI301 Advanced S ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号