Django在原始sql sum查询中的性能与使用循环

时间:2018-04-08 06:35:36

标签: sql django


我知道一般来说,依靠数据库获取记录总和等操作是一种好习惯。然而,这是一个特殊的情况:
我正在使用django和原始sql 我想首先得到一份记录清单,假设我想要一份书籍清单及其价格和折扣百分比,之后我想得到价格和总和折扣(每本书的价格*折扣价格)。例如:

这样做的一种方法是使用SQL的SUM()函数,但由于我已经有记录,为什么不只是使用for循环来计算? 我知道数据库应该更快,但Django连接到数据库需要一些时间,而且书籍的数量并不多(大约5个)。
有人可以帮助我,哪种解决方案更好?
任何帮助表示赞赏和感谢。

1 个答案:

答案 0 :(得分:1)

您似乎在谈论进行单独的数据库调用来进行聚合。你的直觉是正确的,这种调用的开销远远超过任何其他性能差异。

但你不需要另外打电话;您可以在获取完整记录的同一调用中进行聚合。但是,如果您可以在Python中自己进行聚合,那么这样做是没有意义的。对于大量数据而言,让数据库执行此操作可能会带来性能优势,但另一方面,数据库可能比应用程序服务器更容易成为性能瓶颈。

五行表现不会是一个因素。我个人更喜欢用Python做,因为它比SQL更强大,更灵活,但它并不重要。

相关问题