1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      oraclehint中ordered和leading原理很好的帖子

      問題:請教HINT寫法

      企業(yè)建站必須是能夠以充分展現(xiàn)企業(yè)形象為主要目的,是企業(yè)文化與產(chǎn)品對外擴(kuò)展宣傳的重要窗口,一個(gè)合格的網(wǎng)站不僅僅能為公司帶來巨大的互聯(lián)網(wǎng)上的收集和信息發(fā)布平臺(tái),成都創(chuàng)新互聯(lián)公司面向各種領(lǐng)域:成都資質(zhì)代辦成都網(wǎng)站設(shè)計(jì)營銷型網(wǎng)站解決方案、網(wǎng)站設(shè)計(jì)等建站排名服務(wù)。


      我有一個(gè)SQL添加如下hint,目的是指定hash_join方式。

      select /*+ordered use_hash(a,b,c,d) */ *
      From a,b,c,d
      Where ...

      其中,
            a只與b有關(guān)聯(lián)關(guān)系,b只與c有關(guān)聯(lián)關(guān)系,b只與c有關(guān)聯(lián)關(guān)系,c只與d有關(guān)聯(lián)關(guān)系,
          數(shù)量級(jí):a:1000條,  b:100 萬條, c:800萬條 , d:100萬條


      執(zhí)行計(jì)劃為:
      Hash Join
         ---Hash Join
             -----  Hash Join
                     ------  a
                     -----    b
             -----  c
         ---d

      考慮到d表比較小,我能不能做到將d表作為驅(qū)動(dòng)表、而a,b,c關(guān)聯(lián)之后的結(jié)果作為prob外表呢,
      通過Ordered好像是沒有辦法控制這樣,加了就只能是a作為驅(qū)動(dòng)表裝載內(nèi)存,b作為prob表與之關(guān)聯(lián),
      之后的結(jié)果再作為驅(qū)動(dòng)表,以此類推。

      用Leading可以嗎?請給出語法,謝謝。
       
      解答:
       
      oracle 10g中

      hash_join可以通過no_swap_join_inputs/swap_join_inputs來強(qiáng)制控制build表,配合leading或者ordered可以控制多表之前的連接順序。

      比如t1,t2,t3,t4共4張表做hash_join
      可以通過ordered+no_swap_join_inputs/swap_join_inputs來實(shí)現(xiàn)。
      比如
      如果想實(shí)現(xiàn)

      ( T3 hash-join (T1 hash-join T2)) hash-join T4

      t1作為build表和T2做hash_join,然后t3作為build表和t1,t2的結(jié)果集作hash_join,在把t3,t1,t2的結(jié)果集作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  /
      已用時(shí)間:  00: 00: 00.07

      執(zhí)行計(jì)劃
      ----------------------------------------------------------
      Plan hash value: 3494725078

      -------------------------------------------------------------------------------------
      | Id  | Operation            | Name | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
      -------------------------------------------------------------------------------------
      |   0 | SELECT STATEMENT     |      |  2137 |   801K|       |   182   (2)| 00:00:03 |
      |*  1 |  HASH JOIN           |      |  2137 |   801K|       |   182   (2)| 00:00:03 |
      |*  2 |   HASH JOIN          |      |    52 | 14976 |       |   167   (2)| 00:00:03 |
      |*  3 |    TABLE ACCESS FULL | T3   |    40 |  3840 |       |    15   (0)| 00:00:01 |
      |*  4 |    HASH JOIN         |      | 11651 |  2184K|  1232K|   151   (1)| 00:00:02 |
      |   5 |     TABLE ACCESS FULL| T1   | 11651 |  1092K|       |    15   (0)| 00:00:01 |
      |   6 |     TABLE ACCESS FULL| T2   | 11652 |  1092K|       |    15   (0)| 00:00:01 |
      |*  7 |   TABLE ACCESS FULL  | T4   |    41 |  3936 |       |    15   (0)| 00:00:01 |
      -------------------------------------------------------------------------------------

      Predicate Information (identified by operation id):
      ---------------------------------------------------

         1 - access("T3"."OWNER"="T4"."OWNER")
         2 - access("T2"."OBJECT_NAME"="T3"."OBJECT_NAME")
         3 - filter("T3"."OWNER"='MYDB')
         4 - access("T1"."OBJECT_ID"="T2"."OBJECT_ID")
         7 - filter("T4"."OWNER"='MYDB')

      Note
      -----
         - dynamic sampling used for this statement

       
      說明:
      ordered表示依據(jù)from后面寫的表的順序來做聯(lián)結(jié)~
      寫hints,分開些思路清晰~ ordered后 from t1 ,t2 ,t3 ,t4說明首先使用t1做驅(qū)動(dòng)表來連接t2,如何連接呢?看后面的hint use_hash(t2)
      代表連接t2的方式是hash_join;然后用use_hash(t3)表示連接t3的方式是hash-join,那么誰作build表呢?看后面的swap_join_inputs(t3)代表t3作build表和t1-t2的結(jié)果集作連接....依此類推~

      標(biāo)準(zhǔn)的hint就應(yīng)該這么寫~ use_hash(x,y,z)這樣的寫法是不規(guī)范,這樣只是說出了x,y,z地聯(lián)接方式
      ordered 是陳舊的hints,leading是用來代替ordered的~ leading不要求sql的寫法(from后面的順序不要求),直接可以在leading中定義連接順序~
      leading和ordered不能一起使用,也沒必要一起使用~
      至于"能不能舉個(gè)Ordered不能實(shí)現(xiàn)而要用Leading的例子",上面已經(jīng)說了,from后面的不能被修改的情況下可以使用leading.用法google一下,一大堆文檔
      針對leading使用:
      10g中對leading做了加強(qiáng)~ 可以直接在后面寫多表的連接順序了,也就是說使用leading不需要from后面的固定順序了
      MYDB@MYDB10G >select
        2     /*+
        3     leading(t1 t2 t3 t4)
        4     use_hash(t2)
        5     use_hash(t3)
        6     swap_join_inputs(t3)
        7     use_hash(t4)
        8     no_swap_join_inputs(t4)
        9     */  * from t3,t4,t2,t1
      10   where t1.object_id=t2.object_id
      11   and t2.object_name=t3.object_name
      12   and t3.owner=t4.owner
      13   and t4.owner='MYDB'
      14  /
      已用時(shí)間:  00: 00: 00.01

      執(zhí)行計(jì)劃
      ----------------------------------------------------------
      Plan hash value: 3494725078

      -----------------------------------------------------------------------------
      | Id  | Operation            | Name | Rows  | Bytes | Cost (%CPU)| Time     |
      -----------------------------------------------------------------------------
      |   0 | SELECT STATEMENT     |      |  2069 |   179K|    57   (4)| 00:00:01 |
      |*  1 |  HASH JOIN           |      |  2069 |   179K|    57   (4)| 00:00:01 |
      |*  2 |   HASH JOIN          |      |    50 |  3100 |    38   (3)| 00:00:01 |
      |*  3 |    TABLE ACCESS FULL | T3   |    40 |  1080 |    18   (0)| 00:00:01 |
      |*  4 |    HASH JOIN         |      |    82 |  2870 |    20   (5)| 00:00:01 |
      |   5 |     TABLE ACCESS FULL| T1   | 11584 |   248K|    16   (0)| 00:00:01 |
      |   6 |     TABLE ACCESS FULL| T2   |    82 |  1066 |     3   (0)| 00:00:01 |
      |*  7 |   TABLE ACCESS FULL  | T4   |    41 |  1107 |    18   (0)| 00:00:01 |
      -----------------------------------------------------------------------------

      Predicate Information (identified by operation id):
      ---------------------------------------------------

         1 - access("T3"."OWNER"="T4"."OWNER")
         2 - access("T2"."OBJECT_NAME"="T3"."OBJECT_NAME")
         3 - filter("T3"."OWNER"='MYDB')
         4 - access("T1"."OBJECT_ID"="T2"."OBJECT_ID")
         7 - filter("T4"."OWNER"='MYDB')

      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     */  * from t1,t2,t3,t4
      10   where t1.object_id=t2.object_id
      11   and t2.object_name=t3.object_name
      12   and t3.owner=t4.owner
      13   and t4.owner='MYDB'
      14  /
      已用時(shí)間:  00: 00: 00.00

      執(zhí)行計(jì)劃
      ----------------------------------------------------------
      Plan hash value: 3494725078

      -----------------------------------------------------------------------------
      | Id  | Operation            | Name | Rows  | Bytes | Cost (%CPU)| Time     |
      -----------------------------------------------------------------------------
      |   0 | SELECT STATEMENT     |      |  2069 |   179K|    57   (4)| 00:00:01 |
      |*  1 |  HASH JOIN           |      |  2069 |   179K|    57   (4)| 00:00:01 |
      |*  2 |   HASH JOIN          |      |    50 |  3100 |    38   (3)| 00:00:01 |
      |*  3 |    TABLE ACCESS FULL | T3   |    40 |  1080 |    18   (0)| 00:00:01 |
      |*  4 |    HASH JOIN         |      |    82 |  2870 |    20   (5)| 00:00:01 |
      |   5 |     TABLE ACCESS FULL| T1   | 11584 |   248K|    16   (0)| 00:00:01 |
      |   6 |     TABLE ACCESS FULL| T2   |    82 |  1066 |     3   (0)| 00:00:01 |
      |*  7 |   TABLE ACCESS FULL  | T4   |    41 |  1107 |    18   (0)| 00:00:01 |
      -----------------------------------------------------------------------------

      Predicate Information (identified by operation id):
      ---------------------------------------------------

         1 - access("T3"."OWNER"="T4"."OWNER")
         2 - access("T2"."OBJECT_NAME"="T3"."OBJECT_NAME")
         3 - filter("T3"."OWNER"='MYDB')
         4 - access("T1"."OBJECT_ID"="T2"."OBJECT_ID")
         7 - filter("T4"."OWNER"='MYDB'

      當(dāng)前文章:oraclehint中ordered和leading原理很好的帖子
      文章鏈接:http://ef60e0e.cn/article/giohdc.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        汉沽区| 罗甸县| 什邡市| 紫金县| 潜山县| 景谷| 兴和县| 米泉市| 富民县| 四川省| 和政县| 湘阴县| 永定县| 子长县| 乾安县| 云安县| 将乐县| 越西县| 金寨县| 万山特区| 马鞍山市| 云龙县| 景洪市| 虎林市| 镇康县| 漳平市| 芦山县| 汕头市| 安庆市| 绥中县| 东港市| 峨边| 客服| 泰顺县| 张北县| 通许县| 红桥区| 顺义区| 修武县| 长顺县| 黔西县|