摘要:在用对一个千万级别表进行操作时,出现了耗时严重内存飙升的情况。
在用flask-sqlalchemy对一个千万级别表进行count操作时,出现了耗时严重、内存飙升的情况。
要统计出一天内车辆访问次数,原代码如下:
car_visit_counts = CarVisit.query.filter( CarVisit.park == car_visit.park, CarVisit.plate_number == car_visit.plate_number, CarVisit.visited_at >= today_start_time(), ).count()
发现代码运行特别慢,所以把生成的sql打印出来看一下:
SELECT COUNT(*) AS count_1 FROM ( SELECT car_visits.id AS car_visits_id , car_visits.park_id AS car_visits_park_id , car_visits.store_id AS car_visits_store_id , car_visits.car_id AS car_visits_car_id , car_visits.brand_id AS car_visits_brand_id , ... FROM car_visits WHERE %(param_1)s = car_visits.park_id AND car_visits.plate_number = %(plate_number_1)s AND car_visits.visited_at >= %(visited_at_1)s ) AS anon_1
可以发现进行了一次子查询,这样的话会生成临时表,效率低下,将原语句改变一下:
car_visit_counts = db.session.query(func.count(CarVisit.id)).filter( CarVisit.park == car_visit.park, CarVisit.plate_number == car_visit.plate_number, CarVisit.visited_at >= today_start_time(), ).scalar()
此时在看一下打印的sql语句:
SELECT COUNT(car_visits.id) AS count_1 FROM car_visits WHERE %(param_1)s = car_visits.park_id AND car_visits.plate_number = %(plate_number_1)s AND car_visits.visited_at >= %(visited_at_1)s
子查询消失了,速度也快了好多。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/43968.html
摘要:在编写业务逻辑代码的时候我不幸遇到下面的表结构已经将主要逻辑抽离出来了分类分类名称产品产品名称分类现在需要实现的业务是返回分类的列表结果分类这是一个一对多的模型一般的笨拙思路就是明眼人一看就知道可以把换成但是根据这篇文章似乎这样写会有更好的 在编写业务逻辑代码的时候, 我不幸遇到下面的表结构(已经将主要逻辑抽离出来了): class Category(Model): __tab...
摘要:初始化和配置对象关系映射。的则需要在中声明。例如配置信息中指出是可以绑定多个数据库引擎。是通过解决一对多的关系。将会返回学院学生人数将会返回学生的学院信息的类实例。处理关系对象查询中有详细的说明。 初始化和配置 ORM(Object Relational Mapper) 对象关系映射。指将面对对象得方法映射到数据库中的关系对象中。Flask-SQLAlchemy是一个Flask扩展,能...
摘要:你应该使用工厂类来创建类,因为这确保了配置参数的正确性。对象包含创建数据库连接所需的一切信息,它不会立即创建连接对象,而是会在我们进行具体操作时创建。注意生产环境不要使用这个选项。关于选择的最佳实践使用迭代方式获取所有值,而不是。 定义模式Defining Schema 定义ORM类的4个步骤: 继承declarative_base()函数返回的类 定义__tablename__属性...
摘要:自行定义的方法用于权限判断继承至该类的用户模型将作为未登陆时的用户模型可以保持代码的一致性。但是这样的方法很危险,很造成一些其它项目的兼容性问题。打开页面,显示正常。 flask 相对于很多国企的 oracle 数据库而言,是比较新的,因此很多古老的设计并不一定适合较新的 flask 的标准,但作为后来者,你得向前兼容,你得适应需求。本章内容就来解释一下上一章——基于 oracle 的...
阅读 683·2021-11-25 09:43
阅读 2953·2021-11-24 10:20
阅读 1001·2021-10-27 14:18
阅读 1075·2021-09-08 09:36
阅读 3381·2021-07-29 14:49
阅读 1782·2019-08-30 14:07
阅读 2936·2019-08-29 16:52
阅读 3048·2019-08-29 13:12