欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      SQL Server 三大算法(嵌套,合并,哈希)的IO成本總結(jié)

      時間:2019-05-12 19:03:57下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《SQL Server 三大算法(嵌套,合并,哈希)的IO成本總結(jié)》,但愿對你工作學(xué)習(xí)有幫助,當然你在寫寫幫文庫還可以找到更多《SQL Server 三大算法(嵌套,合并,哈希)的IO成本總結(jié)》。

      第一篇:SQL Server 三大算法(嵌套,合并,哈希)的IO成本總結(jié)

      SQL Server 三大算法(嵌套,合并,哈希)的IO成本總結(jié)

      SQL Server三大算法(嵌套,合并,哈希)的IO成本

      1.Nested Loop Join(嵌套循環(huán)聯(lián)結(jié))

      算法:

      其思路相當?shù)暮唵魏椭苯樱簩τ陉P(guān)系R的每個元組 r 將其與關(guān)系S的每個元組 s 在JOIN條件的字段上直接比較并篩選出符合條件的元組。寫成偽代碼就是:

      代價:

      被聯(lián)結(jié)的表所處內(nèi)層或外層的順序?qū)Υ疟PI/O開銷有著非常重要的影響。而CPU開銷相對來說影響較小,主要是元組讀入內(nèi)存以后(in-memory)的開銷,是 O(n * m)

      對于I/O開銷,根據(jù) page-at-a-time 的前提條件,I/O cost = M + M * N,翻譯一下就是 I/O的開銷 = 讀取M頁的I/O開銷 + M次讀取N頁的I/O開銷。

      2.Sort-Merge Join(排序合并聯(lián)結(jié))

      Nested Loop一般在兩個集合都很大的情況下效率就相當差了,而Sort-Merge在這種情況下就比它要高效不少,尤其是當兩個集合的JOIN字段上都有聚集索引(clustered index)存在時,Sort-Merge性能將達到最好。

      算法:

      基本思路也很簡單(復(fù)習(xí)一下數(shù)據(jù)結(jié)構(gòu)中的合并排序吧),主要有兩個步驟:

      (1)按JOIN字段進行排序

      (2)對兩組已排序集合進行合并排序,從來源端各自取得數(shù)據(jù)列后加以比較(需要根據(jù)是否在JOIN字段有重復(fù)值做特殊的“分區(qū)”處理)

      代價:(主要是I/O開銷)

      有兩個因素左右Sort-Merge的開銷:JOIN字段是否已排序 以及 JOIN字段上的重復(fù)值有多少。

      ? 最好情況下(兩列都已排序且至少有一列沒有重復(fù)值):O(n + m)只需要對兩個集合各掃描一遍。(這里的m,n如果都能用到索引那就更好了)

      ? 最差情況下(兩列都未排序且兩列上的所有值都相同):O(n * log n + m * log m + n * m)兩次排序以及一次全部元組間的笛卡爾乘積

      3.Hash Join(哈希聯(lián)結(jié))

      Hash Join在本質(zhì)上類似于兩列都有重復(fù)值時的Sort-Merge的處理思想——分區(qū)(patitioning)。但它們也有區(qū)別:Hash Join通過哈希來分區(qū)(每一個桶就是一個分區(qū))而Sort-Merge通過排序來分區(qū)(每一個重復(fù)值就是一個分區(qū))。

      值得注意的是,Hash Join與上述兩種算法之間的較大區(qū)別同時也是一個較大限制是它只能應(yīng)用于等值聯(lián)結(jié)(equality join),這主要是由于哈希函數(shù)及其桶的確定性及無序性所導(dǎo)致的。算法:

      基本的Hash Join算法由以下兩步組成:

      同nested loop,在執(zhí)行計劃中build input位于上方,probe input位于下方。hash join操作分兩個階段完成:build(構(gòu)造)階段和probe(探測)階段。

      (1)Build Input Phase: 基于JOIN字段,使用哈希函數(shù)h2為較小的S集合構(gòu)建內(nèi)存中(in-memory)的哈希表,相同鍵值的以linked list組成一個桶(bucket)

      (2)Probe Input Phase: 在較大的R集合上對哈希表進行核對以完成聯(lián)結(jié)。代價:

      值得注意的是對于大集合R的每個元組 r,hash bucket中對應(yīng) r 的那個bucket中的每個元組都需要與 r 進行比較,這也是算法最耗時的地方所在。

      CPU開銷是O(m + n * b)b是每個bucket的平均元組數(shù)量。

      總結(jié):

      三種join方法,都是擁有兩個輸入,優(yōu)化的基本原則:

      1.避免大數(shù)據(jù)的hash join,(hash join適合低并發(fā)情況,他占用內(nèi)存和io是很大的)。

      2,盡量將其轉(zhuǎn)化為高效的merge join、nested loop join??赡苁褂玫氖侄斡斜斫Y(jié)構(gòu)設(shè)計、索引調(diào)整設(shè)計、SQL優(yōu)化,以及業(yè)務(wù)設(shè)計優(yōu)化

      下載SQL Server 三大算法(嵌套,合并,哈希)的IO成本總結(jié)word格式文檔
      下載SQL Server 三大算法(嵌套,合并,哈希)的IO成本總結(jié).doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔相關(guān)法律責任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦