##在資源有限的狀況下,如何作兩個大表的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後就等下一次請求?請求