mysql 一次性 select 一千万条会导致oom吗?
假设表里有 1千万条数据,使用 gorm 去获取全部数据,执行如下代码
rows, err := gormDb.Raw("select * from xxx_table").Rows()
if err != nil {
panic(err)
}
for rows.Next() {
}
问题一:
执行 gormDb.Raw("select * from xxx_table").Rows()
,会把数据库所有数据加载到内存吗?经过跟踪源码好像是执行 rows.Next 时才会从 tcp 链接中读取一条数据,如果是这样的 go 服务应该不会有 oom 的风险,但是我不太理解这个读取结果是存到了什么地方,是 go 服务 net.Read 的时候 mysql 才会向 tcp 发结果数据吗?(流式处理)
问题二:
一次性查那么多条数据,mysql 服务是怎么处理的,是一次性把一千万条数据加载到 mysql 服务器的内存里吗?这样 mysql 服务器会有 oom 的风险吧?
还请各位大大们解答。
推荐文章: