我正在尝试使用SQLalchemy从SQL数据库查询大量数据。
some_data = db.session.query(some_info1, some_info2).all()
for key in some_data:
# do something
SQL查询大约需要10秒,for循环大约需要0.2秒。
我也试过了发电机方式。
some_data = db.session.query(some_info1, some_info2)
generator = (x for x in attendee_profile)
for key in generator:
# do something
SQL查询大约需要0.04秒,for循环大约需要10秒。
有没有办法更有效地做到这一点?我特别怀疑使用发电机的循环10秒钟,我的意思是,使用发电机这么慢?
为了清楚起见,我的目标是减少所花费的总时间(不是查询时间,也不是for循环时间)。
答案 0 :(得分:0)
不幸的是,在这两种情况下,您的SQL查询都需要10秒钟。在第一个示例中,query(someinfo1, someinfo2).all()
实际上正在执行查询。 .all()
强制执行查询。
在第二个示例中,query(someinfo1, someinfo2)
实际上并不运行查询。它只构造查询。当您开始迭代时,就是实际运行查询的时间。
长话短说,专注于优化正在运行的实际SQL。使用EXPLAIN ANALYZE
并查看添加索引。问题不在于此处的代码。它与SQL有关。