下面的代码块查询一个有~2000行的表。循环需要20秒才能执行!从我有限的知识来看,我不认为我在做2000个查询,只是一个,但也许我不了解“.”操作符和它在幕后做什么。如何修复此循环以更快地运行?有没有办法调整顶层查询的s.t.第二个for循环没有生成总共3000个查询(如果事实上是这样的话)?你知道吗
下面是我制作的一个测试代码块,用来验证实际上是这个内部循环导致了大量的时间消耗。你知道吗
block = []
cnt = 0
for blah in dbsession.query(mytable):
tic = time.time()
for a in blah.component:
cnt += 1
block.append(time.time()-tic)
print "block: %s seconds cnt: %s" % (sum(block), cnt)
# block: 20.78191 seconds cnt: 3021
使用所选最佳答案的建议,for循环变为:
for blah in dbsession.query(mytable).options( joinedload(mytable.componentA)).options(mytable.componentB)).options(mytable.componentC)
这导致每个组件的内环分别从20-25s变为0.25s、0.59 s和0.11s。查询本身现在需要大约18秒。。。所以我总共节省了55秒
每次访问
.component
时,都会发出另一个SQL查询。你知道吗您可以在Relationship Loading Techniques阅读更多内容,但要一次加载所有内容,您可以将查询更改为以下内容:
相关问题 更多 >
编程相关推荐