通三个提示来控制HASH_JOIN顺序和内建与探测表

hash_join可以通过no_swap_join_inputs/swap_join_inputs来强制控制build表,配合leading可以控制多表之前的连接顺序
----------------创建4个测试表
create table t1 as select * from dba_objects;
create table t2 as select * from dba_objects;
create table t3 as select * from dba_objects;
create table t4 as select * from dba_objects;
exec dbms_stats.gather_table_stats(user,'t1');
exec dbms_stats.gather_table_stats(user,'t2');
exec dbms_stats.gather_table_stats(user,'t3');
exec dbms_stats.gather_table_stats(user,'t4');
 
1 USE_HASH 说明采用什么连接方法

2 LEADING 说明连接顺序

3 SWAP_JOIN_INPUTS 说明 连接当中谁做内建表

4 NO_SWAP_JOIN_INPUTS 说它做探测表

 select
/*+   LEADING(t3,t4,t2,t1)  USE_HASH(T1,T2,T3,t4)  swap_join_inputs(t4) no_swap_join_inputs(t2) no_swap_join_inputs(t1) */
 *
  from T1,T2,T3,T4
 where t1.object_id = t2.object_id
   and t2.object_name = t3.object_name
   and t3.owner = t4.owner
   and t4.owner = 'SYS' ;
SELECT STATEMENT, GOAL = ALL_ROWS Depth=0  Operation=SELECT STATEMENT Cost=1230971
 HASH JOIN Depth=1  Operation=HASH JOIN Cost=1230971
  HASH JOIN Depth=2  Operation=HASH JOIN Cost=54317
   HASH JOIN Depth=3  Operation=HASH JOIN Cost=780
    TABLE ACCESS FULL Depth=4 Object name=T4 Operation=TABLE ACCESS Cost=374
    TABLE ACCESS FULL Depth=4 Object name=T3 Operation=TABLE ACCESS Cost=374
   TABLE ACCESS FULL Depth=3 Object name=T2 Operation=TABLE ACCESS Cost=375
  TABLE ACCESS FULL Depth=2 Object name=T1 Operation=TABLE ACCESS Cost=375



 

唯一可惜的是 SWAP_JOIN_INPUTS不怎么支持 (t3,t4,t1)写法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值