Как установить размер выборки в Голанге?
Я пытаюсь загрузить огромный набор данных из БД.
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 ответ
Это будет хорошо работать для одной строки и миллионов строк. Большинство реализаций SQL имеют понятие пакетов при чтении. Они загружают данные с диска по мере необходимости и поддерживают использование оперативной памяти низким / постоянным при необходимости.
Например, если вы выбираете 1000 строк. База данных может загрузить первые 100 строк в ОЗУ. Пока ты звонишь Next()
Например, когда вы достигаете 50-й строки, база данных захватывает еще сотню (например, строки от 100 до 201).