为什么 rows.Next() 取决于数据库响应率?
来源:stackoverflow
时间:2024-04-04 21:33:38 181浏览 收藏
亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《为什么 rows.Next() 取决于数据库响应率?》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下,希望所有认真读完的童鞋们,都有实质性的提高。
我正在使用 sqlx
、pgx
和 postgresql
。有两个 db。第一个 - 基于 vps
服务器(较慢的一个),第二个 - 在我的 pc 上安装 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秒。为什么这样? db.queryx(query)
代码的第一部分应该取决于数据库响应率。正如我所看到的,它是 db.queryx(query)
应该取决于数据库响应率,因为查询在这里执行,结果放置在 rows
中。在 rows.next()
中,只是对结果进行处理。当我假设 rows.next()
在某种程度上依赖于数据库时,我在 row.next()
循环执行之前关闭了连接,这样 db.close()
。但没有出现错误。记录已处理。
cycle for rows.next()
不与数据库通信,那么为什么它取决于数据库响应率?
解决方案
简短的回答是:是的,rows.Next()
与数据库通信。
来自 database/sql
文档:
行是查询的结果。它的游标在结果集的第一行之前开始
但是,实际上,实现细节留给了数据库驱动程序。
例如,在lib/pq
中,Query
executes either simple query or extended query protocol(更多详细信息请参阅postgres docs),在收到RowDescription
对象后,它将其解析为内部结构(rowHeader
)。然后,rows.Next()
使用它到 fetch actual data。
您可以看到,pgx
做了类似的事情。 Query
方法 executes one of protocols 并将 RowDescription
中的数据保存在 ResultReader
结构中。然后rows.Next
使用它从DB中获取数据。
今天关于《为什么 rows.Next() 取决于数据库响应率?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!
-
502 收藏
-
502 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
139 收藏
-
204 收藏
-
325 收藏
-
477 收藏
-
486 收藏
-
439 收藏
-
357 收藏
-
352 收藏
-
101 收藏
-
440 收藏
-
212 收藏
-
143 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习