<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      簡單回顧嵌套循環:

      兩個表關聯,較小的表(指使用了過濾條件后結果集較小的表)稱為驅動表或者外表(,另一個稱為內表。在嵌套連接過程中,oracle首先讀取驅動表的第一條數據,然后和內表進行比對,所以匹配的記錄存放在結果集中,然后讀取驅動表的下一條數據,重復上面的操作,直到驅動表的所以數據都處理了一遍。嵌套循環是一種從連接結果中提取第一批數據的最快捷方式。

      在驅動表較小、或者內表的關聯列上有唯一索引或高度可選的非唯一索引時,嵌套循環的效果一般會比較好。

      在索引范圍掃描中,如果需要訪問的鍵值數超過大幾百萬時,就不建議使用索引范圍掃描了,因為此時開銷會呈幾何數增長。因此,在使用嵌套循環的過程中,如果發現需要訪問的鍵值數有大幾百萬(驅動表記錄數*每條數據與內表關聯需要訪問的鍵值數),就應該考慮使用hash連接代替,如果是單表走的索引,則應該考慮走全表掃描。

       

      本次小課堂分享的內容:

      1、簡單了解hash連接的流程;

      2、了解hash連接的使用限制及使用場景;

       

      hash連接的流程

      對于什么是Hash算法原理?這個問題有點難度,不是很好說清楚,來做一個比喻吧:我們有很多的小豬,每個的體重都不一樣,假設體重分布比較平均(我們考慮到公斤級別),我們按照體重來分,劃分成100個小豬圈。 然后把每個小豬,按照體重趕進各自的豬圈里,記錄檔案。 好了,如果我們要找某個小豬怎么辦呢?我們需要每個豬圈,每個小豬的比對嗎? 當然不需要了。 我們先看看要找的這個小豬的體重,然后就找到了對應的豬圈了。 在這個豬圈里的小豬的數量就相對很少了。 我們在這個豬圈里就可以相對快的找到我們要找到的那個小豬了。 對應于hash算法。 就是按照hashcode分配不同的豬圈,將hashcode相同的豬放到一個豬圈里。 查找的時候,先找到hashcode對應的豬圈,然后在逐個比較里面的小豬。 所以問題的關鍵就是建造多少個豬圈比較合適。 如果每個小豬的體重全部不同(考慮到毫克級別),每個都建一個豬圈,那么我們可以最快速度的找到這頭豬。缺點就是,建造那么多豬圈的費用有點太高了。 如果我們按照10公斤級別進行劃分,那么建造的豬圈只有幾個吧,那么每個圈里的小豬就很多了。我們雖然可以很快的找到豬圈,但從這個豬圈里逐個確定那頭小豬也是很累的。 所以,好的hashcode,可以根據實際情況,根據具體的需求,在時間成本(更多的豬圈,更快的速度)和空間本(更少的豬圈,更低的空間需求)之間平衡。(摘自網絡)

       

      兩個表做hash連接,較小的表作為驅動表(這里指運用了過濾條件后結果集較小的表),另一個表稱為探測表。

      hash函數的一個特性:相同值經過hash函數運算得到的hash code一定相同,不同值經過hash函數運算得到的hash code可能不同。

      在兩個表做hash連接的過程中,我們會對驅動表的關聯列使用兩個內置函數計算hash值,我們把這兩個hash值分別記為hash_value_1和hash_value_2,我們將hash_value_1相同的記錄存放在一個hash bucket中,這里注意hash bucket只需要記錄該sql語句的查詢列、關聯列及hash_value_2即可。hash table由這些hash bucket組成。

       

      最理想模式下的hash連接流程:

      optimal模式

      optimal模式就是從驅動表上獲取的結果集比較小,可以把整個hash table都建立在用戶可以使用的內存區域里。

      大致上分為以下幾步:

      1、利用連接列上的hash函數,將從驅動表上獲取的結果集做成hash table存放在內存中,這里的hash bucket總是2的n次方。可以簡單的把hash table看做內存里的一個大正方形,里面有很多小格子,驅動表的數據就分布在這些小格子里面,這些小格子就是hash bucket。

      2、oracle開始讀取探測表的數據,對每一個數據都做關聯列上的hash函數(和驅動表的hash函數相同),定位到hash table中的hash bucket,找到hash bucket就進去看看有沒有匹配的數據。

      3、如果hash bucket里沒有數據,則丟棄探測表中的這一行數據。如果有,則進一步查看里面的數據是否和探測表的這條記錄匹配。

      4、循環處理,直到處理完探測表中的所有記錄,返回結果集。

       

      hash連接的使用限制及使用場景:

      1、hash連接種驅動表的關聯列上的可選擇性應當盡可能的好(取值分布比較均勻),因為這個可選擇性會影響hash bucket中的記錄數,而hash bucket中的記錄數又會影響從從匹配數據的效率。因此一個hash bucket所包含的記錄數過多,可能嚴重降低所對應的hash連接的執行效率。

      2、hash連接只適用于CBO,且只能用于等值連接。

      3、hash連接很適合于一個小表(結果集)與一個大表之間的連接,特別是小表關聯列上的可選擇性非常好的情況,此時耗費的時間可以近似看成全表掃描兩個表耗費的時間。

      4、當關聯列上缺乏有效的索引,hash連接比嵌套循環更加有效。

       --整理自網絡

      posted on 2016-03-13 17:14  yedesai  閱讀(3786)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 国产精品第一区亚洲精品| 中国女人和老外的毛片| 国产成人av电影在线观看第一页| 国产精品无码a∨麻豆| 亚洲精品码中文在线观看| 国产精品成| 国产av无码专区亚洲av软件| 国内精品久久久久影院蜜芽| 国产精品涩涩涩视频网站| 99久久精品费精品国产一区二| 久热这里只有精品视频3| 国产精品久久久久久福利| 成人av午夜在线观看| 18禁亚洲一区二区三区| 麻豆一区二区中文字幕| 国产一区二区三区尤物视频| 日本亚洲一区二区精品久久| 亚洲国产大胸一区二区三区| 熟女一区二区中文字幕| 精品视频一区二区福利午夜| 亚洲熟女乱色一区二区三区| 亚洲男人的天堂一区二区| 成人福利国产午夜AV免费不卡在线| 起碰免费公开97在线视频| 少妇伦子伦情品无吗| 欧美色丁香| 日韩中文字幕精品人妻| 另类 专区 欧美 制服| 日本欧美大码a在线观看| 亚洲精品一二三中文字幕| 国产永久免费高清在线观看| 国产成人一区二区三区在线| 久热视频这里只有精品6| 影音先锋AV成人资源站在线播放| 99久久精品国产一区二区蜜芽| 成在线人永久免费视频播放 | 中文字幕成人精品久久不卡| 亚洲精品久久久久国产| 亚洲国产av久久久| 国产精品午夜精品福利| 国产精品国产三级国快看|