如何在golang中设置提取大小?

时间:2019-04-16 08:47:09

标签: go go-sqlite3

我正在尝试从数据库加载巨大的数据集。

    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条记录。

1 个答案:

答案 0 :(得分:0)

这对于单行和数百万行都可以正常工作。大多数SQL实现在读取时都有批处理的概念。它们根据需要从磁盘加载数据,并根据需要使RAM使用率保持较低/恒定。

例如,如果您要选择1000行。数据库可以将前100行加载到RAM。 在您调用Next()时,例如,当您到达第50行时,数据库又捕获了一百个(例如,行100到201)。