我正在使用sqlx,pgx和postgresql. 有两个数据库。第一个 - 基于VPS服务器(慢速),第二个 - 安装locally在我的 PC 上(快速)。我对此代码有疑问:
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 秒。为什么这样?带有 , 的代码的第一部分db.Queryx(query)应该取决于数据库响应率。正如我所看到的,它db.Queryx(query)应该取决于数据库响应率,因为查询在这里执行并且结果放在rows. 在 中rows.Next(),结果只是被处理。当我假设rows.Next()以某种方式依赖于 DB 时,我在row.Next()循环执行之前以这种方式关闭了连接db.Close()。但是没有错误。记录被处理。
Cyclefor rows.Next()不与 DB 通信,为什么它取决于 DB 响应率?
开满天机
相关分类