sqlalchemy 优化count()……
2016-06-28 11:47
253 查看
一、sqlalchemy 中的count()
count()统计数据特别慢:
session.query(cls).count() 8W 数据花费了近50s
但是在数据库中直接查询: select count(*) from table_name. 用时仅0.738s
这个差别让人真是匪夷所思。
后来在【1】看到了原因:
这个就是遍历完数据库所有记录以后,再select count(*).是很恐怖的,当数据量大的时候,低于100W都不算大吧。当然时间是全部花在了遍历上边.
我们可以通过表达式
session.query(func.count(cls.id)).scalar()---直接统计主键id
二、其他优化
-------2016-6-28 11:40:23---
source: 【1】sqlalchemy 查询
[2] sqlalchemy 操作技巧
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 操作技巧
相关文章推荐
- Spring Data Redis 让 NoSQL 快如闪电(2)
- Spring Data Redis 让 NoSQL 快如闪电(2)
- Oracle GoldenGate For SQL Server 未提交事务导致MSSQL日志不截断
- Linux Golang 操作MySql的资源泄漏
- mysql的安装以及出现的问题
- 两个数据库比较 对比视图存储过程及表结构差异
- l来自wentao:项目加入缓存(redis),实时调试时用 -----可视化缓存,flushdb
- 标量子查询
- Redis-3.2.1集群内网部署
- Mysql Explain 详解
- 如何使用容器实现生产级别的MongoDB sharding集群的一键交付
- case when的使用【sql深入学习】
- Oracle中字段为空处理成0
- SQLIte Transaction
- Hibernate使用原生SQL适应复杂数据查询
- mongodb去除重复的数据
- Oracle汉字排序SQL
- mysql日常操作记录大全
- Redis安装与使用
- oracle启动与关闭