我正在使用SQLAlchemy与MySQL数据库,并且我想要计算表中的行数(大约30万)。SQLAlchemy count函数的运行时间比直接在MySQL中编写相同查询语句要长50倍。我做错了什么吗?
# this takes over 3 seconds to return
session.query(Segment).count()
但是:
SELECT COUNT(*) FROM segments;
+----------+
| COUNT(*) |
+----------+
| 281992 |
+----------+
1 row in set (0.07 sec)
表格大小越大,速度差异越大(在少于100k行的情况下几乎不可察觉)。
更新
使用session.query(Segment.id).count()
代替session.query(Segment).count()
似乎可以解决问题并提高速度。但我仍然困惑为什么最初的查询速度较慢。
echo=True
参数启用日志记录,以查看实际生成的'SQL'语句。 - vansession.query(Segment).count()
会发出一个count(*) FROM (SELECT segments.column_1 as segments_column_1, ... FROM segments)
而不是一个简单的count(*) FROM segments
。我猜这种减速来自于扩展所有列。 - mtth