##在资源有限的状况下,如何作两个大表的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后就等下一次请求?请求