共計(jì) 1612 個(gè)字符,預(yù)計(jì)需要花費(fèi) 5 分鐘才能閱讀完成。
這篇文章主要介紹了 hash join 構(gòu)建位圖的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。
hash join 的邏輯
— 全表掃描小表,并把關(guān)聯(lián)字段的值取出,在 pga 里構(gòu)建 hash table。
— 遍歷大表,根據(jù)掃描的結(jié)果按照關(guān)聯(lián)字段執(zhí)行相同的 hash 函數(shù),得到 hash value,去 pga 的 hash table 里找匹配記錄。
較小的 row source 被用來(lái)構(gòu)建 hash table 與 bitmap,第 2 個(gè) row source 被用來(lái)被 hansed,并與第一個(gè) row source 生成的 hash table 進(jìn)行匹配,以便進(jìn)行進(jìn)一步的連接。Bitmap 被用來(lái)作為一種比較快的查找方法,來(lái)檢查在 hash table 中是否有匹配的行。特別的,當(dāng) hash table 比較大而不能全部容納在內(nèi)存中時(shí),這種查找方法更為有用。這種連接方法也有 NL 連接中所謂的驅(qū)動(dòng)表的概念,被構(gòu)建為 hash table 與 bitmap 的表為驅(qū)動(dòng)表,當(dāng)被構(gòu)建的 hash table 與 bitmap 能被容納在內(nèi)存中時(shí),這種連接方式的效率極高。
位圖索引的理解
位圖索引:表有多少行則索引就有多少比特位,比如表的 id 字段建立位圖索引(只有 5(第一行)、10(第二行)、15(剩下所有行)三個(gè)值),表有 100 行,則索引就有 100 比特位,則表第一行是 5,則第一行對(duì)應(yīng)第一個(gè)索引值,索引塊中第一個(gè)索引值是 5 后面對(duì)應(yīng)的不是傳統(tǒng)的 B 樹(shù)索引性質(zhì)的 rowid 而是位圖標(biāo)識(shí)如 1000000000000(99 個(gè) 0),表第二行是 10,則第二行對(duì)應(yīng)第二個(gè)索引值,索引塊中第二個(gè)索引值是 10 后面對(duì)應(yīng) 01000000000000(98 個(gè) 0),第三行之后的所有行對(duì)應(yīng)第三個(gè)索引值 001111111(98 個(gè) 1)
索引塊如下
5 1000000000000
10 0100000000000
15 0011111111111
通過(guò)上面的 1 可以看出 5 只有 1 行是第一行,10 只有 1 行是第二行,15 對(duì)應(yīng)后面的 98 行,如果如下每隔四行就是 5,則說(shuō)明 5 總計(jì)有 20 個(gè)值,發(fā)現(xiàn)每列只有一個(gè) 1, 其實(shí)就是每行只有一個(gè)值得原因
5 1000010000100
10 0100000000000
15 0011101111011
以下為個(gè)人對(duì) hash 位圖的一些理解
位圖就類似下面 a[1][0]、a[1][1]、a[1][2]、..a[1][9]、..a[10][0]
1、2、3、4、..、100
1、2、3、4、..、1000
1、2、3、4、..、10000
如何快速找出 28
a[10][10]
a[100][10]
a[1000][10]
mod(10,10)
a[1][0]=1
a[1][1]=11
..
a[1][9]=91
a[2][0]=2
a[2][1]=12
..
a[2][9]=92
…
a[8][?]
[8][2]- 28
以上 a[10][0]=10、a[10][1]=20(因?yàn)槭粸?1,就是 10. 加上前面?zhèn)€位的 10,就是 20)..a[10][9]=100
1、11、21、31、…91
2、12、22、32、…92
3、13、23、33、…93
…
8、18、28、38、…98
..
10、20、30、40、…100
mod(100,10)
a[1][0]=1
a[1][1]=11
..
a[1][9]=91
a[2][0]=2
a[2][1]=12
..
a[2][9]=92
…
a[28][?]
[28][0]- 28
mod(1000,10)
a[1][0]=1
a[1][1]=11
..
a[1][9]=91
a[2][0]=2
a[2][1]=12
..
a[2][9]=92
…
a[28][?]
[28][0]- 28
感謝你能夠認(rèn)真閱讀完這篇文章,希望丸趣 TV 小編分享的“hash join 構(gòu)建位圖的示例分析”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持丸趣 TV,關(guān)注丸趣 TV 行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!