我正在尝试从数据库加载巨大的数据集。
func main() {
db, err := sql.Open("mysql", "root:pass1@tcp(127.0.0.1:3306)/tuts")
if err != nil {
log.Print(err.Error())
}
defer db.Close()
results, err := db.Query("SELECT id, name FROM tags")
if err != nil {
panic(err.Error())
}
for results.Next() {
var tag Tag
err = results.Scan(&tag.ID, &tag.Name)
if err != nil {
panic(err.Error())
}
log.Printf(tag.Name)
}
}
程序是否一次将所有记录加载到内存中?还是有任何方法指定获取大小,以便程序一次仅加载n行?假设数据库中有一百万行,我想每次获取1000条记录。
答案 0 :(得分:0)
这对于单行和数百万行都可以正常工作。大多数SQL实现在读取时都有批处理的概念。它们根据需要从磁盘加载数据,并根据需要使RAM使用率保持较低/恒定。
例如,如果您要选择1000行。数据库可以将前100行加载到RAM。
在您调用Next()
时,例如,当您到达第50行时,数据库又捕获了一百个(例如,行100到201)。