您好,登錄后才能下訂單哦!
這篇文章主要介紹了hash join構建位圖的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
hash join的邏輯
-- 全表掃描小表,并把關聯字段的值取出,在pga里構建hash table。
-- 遍歷大表,根據掃描的結果按照關聯字段執行相同的hash函數,得到hash value,去pga的hash table里找匹配記錄。
較小的row source 被用來構建hash table 與bitmap,第2個row source 被用來被hansed,并與第一個row source 生成的hash table 進行匹配,以便進行進一步的連接。Bitmap 被用來作為一種比較快的查找方法,來檢查在hash table 中是否有匹配的行。特別的,當hash table 比較大而不能全部容納在內存中時,這種查找方法更為有用。這種連接方法也有NL 連接中所謂的驅動表的概念,被構建為hash table 與bitmap 的表為驅動表,當被構建的hash table 與bitmap 能被容納在內存中時,這種連接方式的效率極高。
位圖索引的理解
位圖索引:表有多少行則索引就有多少比特位,比如表的id字段建立位圖索引(只有5(第一行)、10(第二行)、15(剩下所有行)三個值),表有100行,則索引就有100比特位,則表第一行是5,則第一行對應第一個索引值,索引塊中第一個索引值是5后面對應的不是傳統的B樹索引性質的rowid而是位圖標識如1000000000000(99個0),表第二行是10,則第二行對應第二個索引值,索引塊中第二個索引值是10后面對應01000000000000(98個0),第三行之后的所有行對應第三個索引值001111111(98個1)
索引塊如下
5 1000000000000
10 0100000000000
15 0011111111111
通過上面的1可以看出5只有1行是第一行,10只有1行是第二行,15對應后面的98行,如果如下每隔四行就是5,則說明5總計有20個值,發現每列只有一個1,其實就是每行只有一個值得原因
5 1000010000100
10 0100000000000
15 0011101111011
以下為個人對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(因為十位為1,就是10.加上前面個位的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
感謝你能夠認真閱讀完這篇文章,希望小編分享的“hash join構建位圖的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。