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

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

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

    Decode360's Blog

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

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
      397 隨筆 :: 33 文章 :: 29 評論 :: 0 Trackbacks

    Oracle中表的連接類型

    ?

    ??? Oracle中所謂表的連接,有兩種含義。一種是根據Oracle內部的連接判斷方式區分的內部連接類型,這會影響到系統優化、資源占用等問題。另一種是基于查詢的方式,對兩張表之間建立聯系,會影響到查詢的結果,這里都寫一下。

    ?

    ?

    一、Oracle 中的表內部連接有 3類

    ?

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

    ?

    ??? 原理:掃描一個表,每讀取驅動表的一條記錄,就根據索引去另一個表里面查找,所有匹配記錄放在結果集中,然后再讀取驅動表的下一行。沒有索引一般就不會是 nested loops

    ??? 條件:驅動表結果集不大,被驅動表連接字段要有索引。

    ??? 特點:使用嵌套循環連接是從連接結果中提取第一批記錄的最快速方法。

    ??? 使用: USE_NL(t1 t2) 提示來強制執行 Nested Loops

    ?

    2、 哈希連接( Hash Join )

    ?

    ??? 原理:優化器先掃描小表,根據連接鍵在內存中建立 hash 表,然后掃描大表,每得到一條記錄就探測 hash 表一次,找出匹配行。

    ??? 條件:兩個巨大表之間的連接,或一個巨大的表一個小表之間的連接。且連接鍵無索引。

    ??? 特點:需要較大的內存,如表太大則需要進行分區,并暫時存儲至磁盤的臨時段。掃描成本 = 全表掃描大表 + 分區數 * 表全表掃描小表;還需要注意的是:必須將 HASH_JOIN_ENABLED 設為 True, 并且為參數 PGA_AGGREGATE_TARGET 設置了一個足夠大的值后,才可以執行 Hash Join

    ??? 使用: USE_HASH(t1 t2) 提示來強制執行 Hash Join

    ?

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

    ?

    ??? 原理:將兩個表分別進行排序,然后將兩個表合并,查找出匹配的記錄。

    ??? 條件:行源已經被排過序的情況下使用。

    ??? 特點:主要花費在兩個表的全表掃描和各自的排序上。

    ??? 使用: USE_MERGE(t1 t2) 提示來強制執行 Sort Merge Join

    ?

    ?

    ??? 總結 :當缺少有用的索引時,哈希連接比嵌套循環連接更加有效。哈希連接可能比排序合并連接更快,因為在這種情況下只有一張源表需要排序。哈希連接也可能比嵌套循環連接更快,因為處理內存中的哈希表比檢索 B_Tree 索引更加迅速。

    ?

    ?

    ?

    二、Oracle外部連接方式也分3類:

    ?

    ??? 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、內連接(inner join)

    ?

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

    ?

    ??? 等效于:(可簡寫為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;

    ?

    ??? 等效于:(可簡寫為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;

    ?

    ??? 等效于:(可簡寫為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

    ?

    ??? 等效于:(可簡寫為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.

    ?

    ?

    ?

    posted on 2008-08-12 22:10 decode360 閱讀(895) 評論(0)  編輯  收藏 所屬分類: 07.Oracle
    主站蜘蛛池模板: 亚洲五月六月丁香激情| 狠狠亚洲狠狠欧洲2019| 亚洲国产精品成人综合久久久| 免费a级毛片无码a∨免费软件| 久久精品国产亚洲网站| 无码国产精品一区二区免费模式| 国产精品亚洲精品日韩已满| 曰批全过程免费视频在线观看无码| 亚洲乳大丰满中文字幕| 免费看黄的成人APP| 亚洲酒色1314狠狠做| 黄色片在线免费观看| 一本色道久久88亚洲精品综合| 日韩特黄特色大片免费视频| 国产亚洲精品国产福利在线观看| 国产免费人视频在线观看免费| 一区二区免费电影| 国产日韩亚洲大尺度高清| 天天影院成人免费观看| 99亚偷拍自图区亚洲| 亚洲AV永久无码精品一区二区国产| 国产日韩精品无码区免费专区国产| 亚洲av最新在线网址| 67194熟妇在线永久免费观看| 亚洲国产成人精品无码区花野真一 | 国产午夜亚洲精品不卡电影| 四虎影视免费永久在线观看 | 99久久免费国产精精品| 91亚洲一区二区在线观看不卡| 国拍在线精品视频免费观看| 老司机午夜在线视频免费观| 亚洲国产精品VA在线观看麻豆| 99无码人妻一区二区三区免费| jzzijzzij在线观看亚洲熟妇| 国产成人麻豆亚洲综合无码精品| 999任你躁在线精品免费不卡| 亚洲日本VA午夜在线影院| 中文字幕人成人乱码亚洲电影| 免费人成在线观看69式小视频| 国产成人亚洲毛片| 亚洲福利电影一区二区?|