国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 镇远县| 家居| 西吉县| 武邑县| 唐海县| 堆龙德庆县| 新疆| 壤塘县| 龙口市| 金塔县| 南通市| 南投市| 永安市| 亚东县| 吉木萨尔县| 广宁县| 大冶市| 吉林市| 滨海县| 徐水县| 东乡族自治县| 德安县| 文水县| 兴仁县| 南开区| 揭西县| 克什克腾旗| 五河县| 齐河县| 东光县| 海阳市| 土默特右旗| 龙游县| 章丘市| 会昌县| 焉耆| 怀柔区| 阳高县| 南丰县| 嵊泗县| 故城县|