【问题标题】:SQLAlchemy Faster Than Psycopg2. What's Wrong with My Benchmark?SQLAlchemy 比 Psycopg2 更快。我的基准有什么问题?
【发布时间】:2016-06-15 23:03:49
【问题描述】:

首先,我创建一个包含 5 列的表:

CREATE TABLE table1
(
  a integer,
  b character varying,
  c character varying,
  d numeric,
  e numeric
)

其次,我在一个表中添加 100k 行

https://gist.github.com/ericsalim/1d12628826195b52c5d282c2326f5e00

第三,我使用 Psycopg2 和 SQLAlchemy 选择所有行

Psycopg2 的结果

  • 查询时间:2839.46800232
  • 转换时间:792.379140854
  • 分辨率大小:400036
  • 行列表大小:412232

SQLAlchemy 的结果:

  • 查询时间:2401.74889565
  • 转换时间:377.213001251
  • 分辨率大小:412232
  • 行列表大小:412232

SQLAlchemy 是 Psycopg2 上的 ORM 层,它怎么可能比 Psycopg2 本身更快?我的代码有问题吗?

【问题讨论】:

  • 这里不用ORM,代码一样,只是用另一种方式连接DB。尝试使用python profilers,也许你会发现问题。

标签: python postgresql sqlalchemy psycopg2


【解决方案1】:

这是DictCursor 的开销。将其切换为使用标准游标和整数索引会导致 psycopg2 表现出色。我想 SQLAlchemy 使用一种不同的、更有效的方法来支持字符串索引。但除了学术好奇心之外,我不会担心两者之间的性能差异 - 关注哪个对您更有效率。在大多数现实世界的场景中,您将受到 I/O 限制,并且差异小到可以忽略不计。

【讨论】:

  • 谢谢。删除 DictCursor 使其比 SQLAlchemy 更快。我想这意味着 SQLAlchemy 非常高效:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-19
  • 2010-11-23
  • 1970-01-01
  • 2021-05-07
  • 2017-04-03
  • 2015-07-20
  • 2011-11-07
相关资源
最近更新 更多