<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Decode360's Blog

    業(yè)精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
      302 隨筆 :: 26 文章 :: 82 評(píng)論 :: 0 Trackbacks

    一、Oracle 中的表內(nèi)部連接有 3類(lèi)

    ?

    1、 嵌套循環(huán)連接( Nested Loops

    原理 :掃描一個(gè)表,每讀取驅(qū)動(dòng)表的一條記錄,就根據(jù)索引去另一個(gè)表里面查找,所有匹配記錄放在結(jié)果集中,然后再讀取驅(qū)動(dòng)表的下一行。沒(méi)有索引一般就不會(huì)是 nested loops

    條件 :驅(qū)動(dòng)表結(jié)果集不大,被驅(qū)動(dòng)表連接字段要有索引。

    特點(diǎn) :使用嵌套循環(huán)連接是從連接結(jié)果中提取第一批記錄的最快速方法。

    使用 USE_NL(t1 t2) 提示來(lái)強(qiáng)制執(zhí)行 Nested Loops

    ?

    2、 哈希連接( Hash Join

    原理 :優(yōu)化器先掃描小表,根據(jù)連接鍵在內(nèi)存中建立 hash 表,然后掃描大表,每得到一條記錄就探測(cè) hash 表一次,找出匹配行。

    條件 :兩個(gè)巨大表之間的連接,或一個(gè)巨大的表一個(gè)小表之間的連接。切連接鍵無(wú)索引。

    特點(diǎn) :需要較大的內(nèi)存,如表太大則需要進(jìn)行分區(qū),并暫時(shí)存儲(chǔ)至磁盤(pán)的臨時(shí)段。掃描成本 = 全表掃描大表 + 分區(qū)數(shù) * 表全表掃描小表;還需要注意的是:必須將 HASH_JOIN_ENABLED 設(shè)為 True, 并且為參數(shù) PGA_AGGREGATE_TARGET 設(shè)置了一個(gè)足夠大的值后,才可以執(zhí)行 Hash Join

    使用 USE_HASH(t1 t2) 提示來(lái)強(qiáng)制執(zhí)行 Hash Join

    ?

    3、 排序合并連接( Sort Merge Join

    原理 :將兩個(gè)表分別進(jìn)行排序,然后將兩個(gè)表合并,查找出匹配的記錄。

    條件 :行源已經(jīng)被排過(guò)序的情況下使用。

    特點(diǎn) :主要花費(fèi)在兩個(gè)表的全表掃描和各自的排序上。

    使用 USE_MERGE(t1 t2) 提示來(lái)強(qiáng)制執(zhí)行 Sort Merge Join

    ?

    ?

    總結(jié) :當(dāng)缺少有用的索引時(shí),哈希連接比嵌套循環(huán)連接更加有效。哈希連接可能比排序合并連接更快,因?yàn)樵谶@種情況下只有一張?jiān)幢硇枰判颉9_B接也可能比嵌套循環(huán)連接更快,因?yàn)樘幚韮?nèi)存中的哈希表比檢索 B_Tree 索引更加迅速。

    ?

    ?

    ?

    二、Oracle外部連接方式也分3類(lèi):

    ?

    ??? SQL> select * from t11;

    ??????????? C1???????? C2
    ??? ---------- ----------
    ???????????? 5????????? 5
    ???????????? 1????????? 1
    ???????????? 2????????? 2

    ??? SQL> select * from t22;

    ??????????? D1???????? D2
    ??? ---------- ----------
    ???????????? 1????????? 1
    ???????????? 2????????? 2
    ???????????? 3????????? 3
    ???????????? 4????????? 4

    ?

    1、內(nèi)連接(inner join)

    ??? SQL> select c1,c2,d1,d2 from t11 inner join t22 on t11.c1=t22.d1;

    ??? 等效于:(可簡(jiǎn)寫(xiě)為join)

    ??? SQL> select c1,c2,d1,d2 from t11,t22 where t11.c1=t22.d1;

    ??? 效果:

    ??????????? C1???????? C2???????? D1???????? D2
    ??? ---------- ---------- ---------- ----------
    ???????????? 1????????? 1????????? 1????????? 1
    ???????????? 2????????? 2????????? 2????????? 2

    ?

    2、外連接(outer join)

    ?

    ? 左外連接

    ??? SQL> select c1,c2,d1,d2 from t11 left outer join t22 on t11.c1=t22.d1;

    ??? 等效于:(可簡(jiǎn)寫(xiě)為left?join)

    ??? SQL> select c1,c2,d1,d2 from t11,t22 where t11.c1=t22.d1(+);

    ??? 效果:

    ??????????? C1???????? C2???????? D1???????? D2
    ??? ---------- ---------- ---------- ----------
    ???????????? 5????????? 5
    ???????????? 1????????? 1????????? 1????????? 1
    ???????????? 2????????? 2????????? 2????????? 2

    ? 右外連接

    ??? SQL> select c1,c2,d1,d2 from t11 right outer join t22 on t11.c1=t22.d1;

    ??? 等效于:(可簡(jiǎn)寫(xiě)為right?join)

    ??? SQL> select c1,c2,d1,d2 from t11,t22 where t11.c1(+)=t22.d1;

    ??? 效果:

    ??????????? C1???????? C2???????? D1???????? D2
    ??? ---------- ---------- ---------- ----------
    ???????????? 1????????? 1????????? 1????????? 1
    ???????????? 2????????? 2????????? 2????????? 2
    ?????????????????????????????????? 4????????? 4
    ?????????????????????????????????? 3????????? 3

    ? 全外連接

    ??? SQL> select c1,c2,d1,d2 from t11 full outer join t22 on t11.c1=t22.d1;

    ??? 效果:

    ??????????? C1???????? C2???????? D1???????? D2
    ??? ---------- ---------- ---------- ----------
    ???????????? 5????????? 5
    ???????????? 1????????? 1????????? 1????????? 1
    ???????????? 2????????? 2????????? 2????????? 2
    ?????????????????????????????????? 4????????? 4
    ?????????????????????????????????? 3????????? 3

    ??? 等效于:(可簡(jiǎn)寫(xiě)為full?join)

    ??? SQL> select c1,c2,d1,d2 from t11,t22 where t11.c1=t22.d1(+)
    ????? 2? union
    ????? 3? select c1,c2,d1,d2 from t11,t22 where t11.c1(+)=t22.d1;

    ?

    3、交叉連接(cross join)

    ??? SQL> select c1,c2,d1,d2 from t11 cross join t22;

    ??? 等效于:(其他join必須有on子句)

    ??? SQL> select c1,c2,d1,d2 from t11,t22;

    ??? 效果:

    ??????????? C1???????? C2???????? D1???????? D2
    ??? ---------- ---------- ---------- ----------
    ???????????? 5????????? 5????????? 1????????? 1
    ???????????? 5????????? 5????????? 2????????? 2
    ???????????? 5????????? 5????????? 3????????? 3
    ???????????? 5????????? 5????????? 4????????? 4
    ???????????? 1????????? 1????????? 1????????? 1
    ???????????? 1????????? 1????????? 2????????? 2
    ???????????? 1????????? 1????????? 3????????? 3
    ???????????? 1????????? 1????????? 4????????? 4
    ???????????? 2????????? 2????????? 1????????? 1
    ???????????? 2????????? 2????????? 2????????? 2
    ???????????? 2????????? 2????????? 3????????? 3

    ???????????? 2????????? 2????????? 4????????? 4

    ??? 12 rows selected.

    ?

    ?

    ?

    ?

    ?

    ?





    -The End-

    posted on 2008-08-12 14:10 decode360-3 閱讀(289) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Oracle
    主站蜘蛛池模板: 日本xxwwxxww在线视频免费 | 国产精品成人免费视频网站京东| 国产精品免费观看调教网| 国产精品免费αv视频| 一级做受视频免费是看美女| 黄页视频在线观看免费| 免费激情网站国产高清第一页 | 亚洲成人在线免费观看| 亚洲综合激情六月婷婷在线观看 | 亚洲成AV人片在| 亚洲国产天堂久久综合网站| 日韩亚洲Av人人夜夜澡人人爽| 亚洲最新永久在线观看| 亚洲国产精品成人精品小说 | 亚洲一区无码中文字幕| 久久亚洲精品中文字幕三区| 亚洲AV乱码一区二区三区林ゆな| 老司机亚洲精品影院| 亚洲中文字幕久在线| 亚洲欧美乱色情图片| 国产亚洲精品免费| free哆拍拍免费永久视频 | 亚洲人成图片网站| 亚洲AV性色在线观看| 一级毛片a女人刺激视频免费| 你懂得的在线观看免费视频| 99精品热线在线观看免费视频| 精品国产无限资源免费观看| 无码一区二区三区免费视频| 免费人成视频在线观看视频| 国产精品亚洲成在人线| 久久久久亚洲AV无码专区首JN| 亚洲午夜理论片在线观看| 免费国产va视频永久在线观看| 久久久久成人精品免费播放动漫| 性做久久久久久免费观看| 久久精品国产亚洲AV电影| 亚洲国产精品网站久久| 亚洲AV成人无码网站| 特级做A爰片毛片免费看无码| 18级成人毛片免费观看|