一、sqlalchemy 中的count()
count()统计数据特别慢:
session.query(cls).count() 8W 数据花费了近50s
但是在数据库中直接查询: select count(*) from table_name. 用时仅0.738s
这个差别让人真是匪夷所思。
后来在【1】看到了原因:count()
方法被用于确定返回的结果集中有多少行,让我们观察一下产生的SQL语句,SQLAlchemy先是取出符合条件的所有行集合,然后再通过SELECT count(*)
来统计有多少行。
这个就是遍历完数据库所有记录以后,再select count(*).是很恐怖的,当数据量大的时候,低于100W都不算大吧。当然时间是全部花在了遍历上边.
我们可以通过表达式func.count()
直接使用count函数。-----这个就是相当于数据库中的直接count()
session.query(func.count(cls.id)).scalar()---直接统计主键id
二、其他优化
-------2016-6-28 11:40:23---
source: 【1】sqlalchemy 查询
[2] sqlalchemy 操作技巧