Я использую sqlx
, pgx
и postgresql
. Есть две БД. Первый - на базе VPS
сервера (медленный), второй - на моем P C (быстрый) установлен locally
. У меня есть вопрос по поводу этого кода:
var ordersSlice []OrdersModel
start := time.Now()
query = `select * from get_all_orders();`
rows, err = db.Queryx(query)
log.Printf("Query time %s", time.Since(start)) // avg in slow DB - 62ms, avg in fast DB - 20ms
if rows == nil || err != nil {
fmt.Println(err)
fmt.Println("no result")
response.WriteHeader(http.StatusInternalServerError)
return
}
// db.Close() to check if rows.Next() depends on DB
start = time.Now()
for rows.Next() {
var order OrdersModel
err = rows.StructScan(&order)
if err != nil {
fmt.Println(err)
}
ordersSlice = append(ordersSlice, order)
}
log.Printf("Sturct scan time %s", time.Since(start)) // avg in slow DB - 14.4S, avg in fast DB - 9ms
Я имею в виду rows.Next()
занимает больше времени, чем db.Queryx(query)
с медленной БД. Для обработки результата требуется 14,4 se c. Почему так? Первая часть кода с db.Queryx(query)
должна зависеть от скорости отклика в дБ. Как я вижу, это db.Queryx(query)
должно зависеть от скорости отклика в дБ, поскольку запрос выполняется здесь, а результаты помещаются в rows
. А в rows.Next()
результаты просто обрабатываются. Когда я предположил, что rows.Next()
как-то зависит от БД, я закрыл соединение до выполнения row.Next()
l oop, таким образом db.Close()
. Но ошибки не было. Записи обработаны.
Цикл for rows.Next()
не связывается с БД, так почему это зависит от скорости отклика БД?