思考-继续思考在数据库中两个表join的问题

##在资源有限的情况下,如何做两个大表的join?

 

---

假设系统资源:内存1G,大表10G,小表2G。

---

 

都拿到内存中进行笛卡尔集肯定不行,内存没有那么大。 

最简单的办法是对两个表建索引,但是万一两个索引都很大,一个索引500M,一个索引1G,其实索引应该没有那么大,我们就估算极端情况。

仅对索引进行bitmap scan,最后读取满足的记录。但对两个索引进行扫描时,内存就不够了,怎么处理?

想到办法是用hash jion的方式,对2G小表做hash,可能只占100M。然后循环读取10G大表,每次读取32M,然后去进行hash jion记录满足需求的记录,循环结束之后再去读取对应的记录。

 

那么筛选的结果假如有5G,怎么给客户端传输,客户端内存也1G。

会从满足需求的记录信息中循环读取并投影,例如网络传输的buf为64M,那么读取64M后就等下一次请求?

posted @ 2019-06-13 10:11  狂神314  阅读(319)  评论(0编辑  收藏  举报