国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

淺析SQL Server三大算法的I/O成本

瀏覽:141日期:2023-10-28 07:04:03

本文作者先對SQL Server三大算法的IO成本進(jìn)行分析,然后提出優(yōu)化原則。希望可以給讀者帶來幫助。

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

算法:

其思路相當(dāng)?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一般在兩個集合都很大的情況下效率就相當(dāng)差了,而Sort-Merge在這種情況下就比它要高效不少,尤其是當(dāng)兩個集合的JOIN字段上都有聚集索引(clustered index)存在時,Sort-Merge性能將達(dá)到最好。

算法:

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

a.按JOIN字段進(jìn)行排序

b.對兩組已排序集合進(jìn)行合并排序,從來源端各自取得數(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(探測)階段。

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

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

代價:

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

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。可能使用的手段有表結(jié)構(gòu)設(shè)計、索引調(diào)整設(shè)計、SQL優(yōu)化,以及業(yè)務(wù)設(shè)計優(yōu)化。

標(biāo)簽: Sql Server 數(shù)據(jù)庫
主站蜘蛛池模板: 欧美性色生活片天天看99 | 国产又色又爽黄的网站免费 | 一区二区国产在线观看 | 日韩毛片免费视频一级特黄 | tom影院亚洲国产日本一区 | 一级毛片免费视频网站 | 国产一区二区久久精品 | 亚洲一区二区三区一品精 | 欧美亚洲影院 | 黄色网址免费在线 | 日韩亚洲欧美一区 | 久久精品国产欧美成人 | 精品无码久久久久国产 | 美女在线看永久免费网址 | 精品精品国产自在久久高清 | 欧美高清性刺激毛片 | 欧美手机视频 | 在线视频一区二区日韩国产 | 亚洲在线视频免费 | 成年人网站黄 | 欧美成人一区二区三区在线视频 | 国内在线精品 | 日韩久久久精品中文字幕 | 在线日韩视频 | 免费国产99久久久香蕉 | 亚洲欧美日韩一区 | 韩国一级永久免费观看网址 | 欧美一级在线视频 | 一级毛片欧美大片 | 九九九九在线视频播放 | 国产三级精品久久三级国专区 | 欧美性视频一区二区三区 | s8国产成人精品视频 | 久久精品国产欧美成人 | 国产成人高清精品免费5388密 | 亚洲欧美日韩国产vr在线观 | 一级a性色生活片久久毛片 一级a做爰片欧欧美毛片4 | 欧美中文字幕一区二区三区 | 成人在线网站 | 亚洲黄视频在线观看 | www.欧美在线观看 |