思考-繼續思考在數據庫中兩個表join的問題

##在資源有限的狀況下,如何作兩個大表的join?網絡

 

---索引

假設系統資源:內存1G,大表10G,小表2G。內存

---資源

 

都拿到內存中進行笛卡爾集確定不行,內存沒有那麼大。 hash

最簡單的辦法是對兩個表建索引,可是萬一兩個索引都很大,一個索引500M,一個索引1G,其實索引應該沒有那麼大,咱們就估算極端狀況。it

僅對索引進行bitmap scan,最後讀取知足的記錄。但對兩個索引進行掃描時,內存就不夠了,怎麼處理?io

想到辦法是用hash jion的方式,對2G小表作hash,可能只佔100M。而後循環讀取10G大表,每次讀取32M,而後去進行hash jion記錄知足需求的記錄,循環結束以後再去讀取對應的記錄。循環

 

那麼篩選的結果假若有5G,怎麼給客戶端傳輸,客戶端內存也1G。map

會從知足需求的記錄信息中循環讀取並投影,例如網絡傳輸的buf爲64M,那麼讀取64M後就等下一次請求?請求

相關文章
相關標籤/搜索