哪一个更好(在大多数因素中,例如内存使用情况、可伸缩性,在这两种情况下:总数据少于 RAM 或数据库中的总数据多于 RAM):
每 1k 查询多次,直到没有更多行
SELECT *
FROM foo
LEFT JOIN ... ON ... -- multiple times
ORDER BY created
LIMIT ?*1000, 1000
然后
n := 0
for {
rows, err := db.Query(sql, n) // assume this is prepared statement
if err != nil { return nil, err }
defer rows.Close()
subtotal := 0
for rows.Next() {
err = rows.Scan( ... )
if err != nil { return nil, err }
subtotal += 1
}
if subtotal == 0 { break }
n += 1
}
对比
一次查询然后扫描它
SELECT *
FROM foo
LEFT JOIN ... ON ... -- multiple times
ORDER BY created
然后
rows, err := db.Query(sql) // assume this is prepared statement
if err != nil { return nil, err }
defer rows.Close()
for rows.Next() {
err = rows.Scan( ... )
if err != nil { return nil, err }
}
烙印99
青春有我
相关分类