程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> oracle hint中ordered 和leading原理很好的

oracle hint中ordered 和leading原理很好的

編輯:Oracle數據庫基礎
Oracle hint中ordered 和leading原理很好的帖子我有一個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 T4t1作為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  /
已用
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved