国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

為何nested loop要求小表驅(qū)動,hash join又為何要求小表hashed

2024-07-21 02:45:04
字體:
供稿:網(wǎng)友


nested loop的過程:選擇row resource 最小的那個表作為驅(qū)動表(外部表),內(nèi)部表要求有選擇性高的index。 從外部表(驅(qū)動表)里一次取一行對內(nèi)部表的每行進行比較,即外部表有幾個distinct行,就有幾次nested loop。

所以nested loop的代價是:

cost  = outer access cost + (inner access cost * outer cardinality)

outer access cost應(yīng)該是讀取驅(qū)動表到內(nèi)存,而內(nèi)部表要求有有效的index也是為了降低inner access cost,而驅(qū)動表要求小,也就很好理解了。



Hash join 在缺少index的情況下比nested loop更有效,一般情況下比nested loop更快,因為處理內(nèi)存中的hash表比b-tree index更迅速。有無index,對hash join并沒有什么影響。

一般也是選擇較小的表(內(nèi)部表)讀入內(nèi)存,進行hash 算法,根據(jù)連接鍵構(gòu)建成hash table。該表如果太大的話,會根據(jù)當(dāng)前系統(tǒng)的參數(shù)設(shè)置,將該表分piece讀入內(nèi)存構(gòu)建成hash表。然后外部表中的每行也被讀入內(nèi)存進行hash算法,得到一個hash值,對該piece進行比較。

所以hash join的cost 如下:

cost = (outer access cost * number of hash partitions) + inner access cost



上述兩個cost里面都是先計算出讀入內(nèi)存的小表的access cost,只不過小表對于nested loop來說是outer table,而對于hash join而言是inner table



可見,如果一個hash內(nèi)存設(shè)置的大的話,如果只有一個piece,那么cost=內(nèi)部表與外部表的access cost相加之和,相當(dāng)?shù)?。?dāng)然也要算上hash的代價,所以hash應(yīng)該比nest loop快,但是選擇nested loop還是hash join,一切交給optimizer就可以了。



本文來自CSDN博客,轉(zhuǎn)載請標明出處:http://blog.csdn.net/rabbitbug/archive/2009/12/21/5049263.aspx
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 清苑县| 日照市| 衡阳市| 莎车县| 英吉沙县| 酒泉市| 舒兰市| 莒南县| 依安县| 高邮市| 荔波县| 封丘县| 班玛县| 青冈县| 庄浪县| 昭通市| 诸暨市| 淄博市| 广宗县| 册亨县| 大洼县| 江山市| 商城县| 明光市| 克东县| 乳源| 平安县| 兴安县| 逊克县| 洪江市| 崇明县| 沧州市| 红安县| 视频| 岗巴县| 故城县| 乐山市| 永安市| 宜宾县| 称多县| 太谷县|