迭代与order_by()效率

时间:2014-01-16 20:22:18

标签: python sql django performance

我正在尝试从查询集中找到成本最高的项目,我只是想知道以下哪一项(如果有的话)效率更高

items = Item.objects.all()

highest_cost = max(item.cost for item in items)
#Or
highest_cost = items.order_by('-cost')[0].cost

我并不是非常关心表现,我只是好奇。

2 个答案:

答案 0 :(得分:2)

首先,您只需使用django的Max aggregation

items = Item.objects.all()
items.aggregate(Max('cost'))

其次,你的问题的答案取决于各种因素。例如。如果表非常大(许多记录,或特别大的记录),您将需要避免检索所有这些,只需要一个(第一个查询)。但是,如果表中有数百万条记录,并且您订购的列上没有索引,则排序可能非常慢(O(nlogn)),而查找最大值为O(n)。

但是,在大多数情况下,让DB服务器完成工作(在您的示例中,使用order by)应该更快。

答案 1 :(得分:1)

order_by要快得多,特别是如果数据库中有很多条目。