成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

運維 數據庫運維 SQL Server 算法
本文作者先對SQL Server三大算法的IO成本進行分析,然后提出優化原則。希望可以給讀者帶來幫助。

1. Nested Loop Join(嵌套循環聯結)

算法:

其思路相當的簡單和直接:對于關系R的每個元組 r 將其與關系S的每個元組 s 在JOIN條件的字段上直接比較并篩選出符合條件的元組。寫成偽代碼就是:

代價:

被聯結的表所處內層或外層的順序對磁盤I/O開銷有著非常重要的影響。而CPU開銷相對來說影響較小,主要是元組讀入內存以后(in-memory)的開銷,是 O (n * m)

對于I/O開銷,根據 page-at-a-time 的前提條件,I/O cost = M + M * N,

翻譯一下就是 I/O的開銷 = 讀取M頁的I/O開銷 + M次讀取N頁的I/O開銷。

2. Sort-Merge Join (排序合并聯結)

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

算法:

基本思路也很簡單(復習一下數據結構中的合并排序吧),主要有兩個步驟:

a.按JOIN字段進行排序

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

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

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

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

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

3. Hash Join (哈希聯結)

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

值得注意的是,Hash Join與上述兩種算法之間的較大區別同時也是一個較大限制是它只能應用于等值聯結(equality join),這主要是由于哈希函數及其桶的確定性及無序性所導致的。

算法:

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

同nested loop,在執行計劃中build input位于上方,probe input位于下方。

hash join操作分兩個階段完成:build(構造)階段和probe(探測)階段。

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

b.Probe Input Phase: 在較大的R集合上對哈希表進行核對以完成聯結。

代價:

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

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

總結:

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

1.避免大數據的hash join,(hash join適合低并發情況,他占用內存和io是很大的);

2.盡量將其轉化為高效的merge join、nested loop join。可能使用的手段有表結構設計、索引調整設計、SQL優化,以及業務設計優化。

【編輯推薦】

  1. SQL Server查詢速度緩慢解決辦法
  2. SQL Server查詢過程的內存實際消耗
  3. 如何在SQL Server數據庫中成批導入數據
責任編輯:楊鵬飛 來源: CSDN
相關推薦

2010-11-16 08:48:45

SQL ServerOracle

2011-02-25 09:16:00

SQLSQL Server IO

2011-02-22 10:37:00

SQL ServerSQL Server 性能診斷

2024-08-28 08:33:57

2016-10-12 13:53:38

JavaByteBufferRandomAcces

2010-04-23 13:33:44

服務器IO瓶頸

2009-07-06 18:18:41

SQL Server全

2011-03-03 10:45:51

2025-03-28 10:00:00

Akamai云服務云計算

2018-11-05 11:20:54

緩沖IO

2013-11-29 09:26:40

綜合布線萬兆銅纜智能管理

2013-11-06 14:16:23

流程

2011-09-02 14:05:25

SQL Server性能調優

2009-09-29 09:50:46

2009-03-13 10:03:34

2011-01-14 09:25:28

LinuxIO機制

2010-07-06 15:40:49

SQL Server

2009-06-12 09:03:31

SQL Server復向后兼容

2014-08-28 15:55:02

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲一区二区在线 | 国产午夜一级 | 欧美极品在线观看 | 激情欧美一区二区三区中文字幕 | 一区二区在线观看免费视频 | 国产高清在线精品一区二区三区 | 犬夜叉在线观看 | 精品久久一区 | 中文字幕国产日韩 | 国产精品久久久久久久久久久免费看 | 一区在线播放 | 免费国产视频在线观看 | 亚洲一区播放 | 久久av一区二区三区 | 91在线看片| 不卡av电影在线播放 | 中文字幕1区2区3区 日韩在线视频免费观看 | 日本天堂一区二区 | 国产91久久久久久久免费 | 国产欧美一区二区三区日本久久久 | 欧美video| 国产精品久久久久久久一区二区 | 久久国产精品72免费观看 | 国产色网 | 欧美中文字幕一区二区三区亚洲 | 天堂成人国产精品一区 | 国产精品夜间视频香蕉 | 黑人巨大精品欧美一区二区免费 | 日韩一区二区三区精品 | 午夜一区 | 亚洲人久久 | 一级网站 | 91看片在线 | 午夜免费网站 | 观看av| 日韩欧美在线播放 | 欧美午夜精品 | 亚洲三级在线观看 | 九九久久久 | 亚洲一区二区免费电影 | 一本大道久久a久久精二百 国产成人免费在线 |