首页 > 后端开发 > Golang > 为什么我的 Go 数据库/sql 查询比直接 Postgres psql 查询慢得多?

为什么我的 Go 数据库/sql 查询比直接 Postgres psql 查询慢得多?

Linda Hamilton
发布: 2024-11-22 09:44:11
原创
845 人浏览过

Why is my Go database/sql Query Significantly Slower Than a Direct Postgres psql Query?

使用数据库/sql 查询比直接查询数据库慢得多

尽管使用相同的查询,但执行查询之间存在明显的性能差异直接使用 Postgres 的 psql 实用程序并使用 Go 应用程序中的 database/sql 包进行查询。这种差异(在 psql 中需要几毫秒的查询在 Go 中需要几十毫秒)可能归因于实现中的特定因素。

了解数据库/sql 连接

database/sql 初始化一个连接池来建立与数据库的连接,而不是创建单个连接。 database/sql 中查询执行的初始延迟是因为池以零打开连接开始。第一个查询必须在执行 SQL 语句之前建立与服务器的连接。

后续查询也会面临延迟,因为第一个查询的连接尚未释放回池中。这意味着每个后续查询在执行查询之前都需要创建一个新连接。

将连接释放回池

要解决性能差异,请确保连接每次查询后都会释放回池中。释放连接涉及保留 db.Query 的主要返回值,然后调用其 Close 方法。

使用打开的连接初始化池

为了缓解初始延迟,初始化后立即对连接池调用 Ping。这可确保池中至少有一个连接可用。

准备好的语句

虽然不带参数的简单查询按预期执行,但在数据库/sql 中带参数的查询实际上在幕后创建并执行准备好的语句。使用不同参数多次执行相同查询时,准备好的语句可提供性能优势。

解决额外延迟

除了连接管理和准备好的语句之外,还可能存在其他延迟因素需要考虑:

  • 网络延迟:数据传输造成的延迟应用程序和数据库之间的网络。
  • 服务器负载:数据库服务器的工作负载会影响查询执行时间。

通过解决这些因素并实施根据建议,使用database/sql查询的性能可以得到显着提升,堪比直接查询数据库。

以上是为什么我的 Go 数据库/sql 查询比直接 Postgres psql 查询慢得多?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板