##在资源有限的情况下,如何做两个大表的join?
---
假设系统资源:内存1G,大表10G,小表2G。
---
都拿到内存中进行笛卡尔集肯定不行,内存没有那么大。
最简单的办法是对两个表建索引,但是万一两个索引都很大,一个索引500M,一个索引1G,其实索引应该没有那么大,我们就估算极端情况。
仅对索引进行bitmap scan,最后读取满足的记录。但对两个索引进行扫描时,内存就不够了,怎么处理?
想到办法是用hash jion的方式,对2G小表做hash,可能只占100M。然后循环读取10G大表,每次读取32M,然后去进行hash jion记录满足需求的记录,循环结束之后再去读取对应的记录。
那么筛选的结果假如有5G,怎么给客户端传输,客户端内存也1G。
会从满足需求的记录信息中循环读取并投影,例如网络传输的buf为64M,那么读取64M后就等下一次请求?