我正在尝试从查询集中找到成本最高的项目,我只是想知道以下哪一项(如果有的话)效率更高
items = Item.objects.all()
highest_cost = max(item.cost for item in items)
#Or
highest_cost = items.order_by('-cost')[0].cost
我并不是非常关心表现,我只是好奇。
答案 0 :(得分:2)
首先,您只需使用django的Max
aggregation。
items = Item.objects.all()
items.aggregate(Max('cost'))
其次,你的问题的答案取决于各种因素。例如。如果表非常大(许多记录,或特别大的记录),您将需要避免检索所有这些,只需要一个(第一个查询)。但是,如果表中有数百万条记录,并且您订购的列上没有索引,则排序可能非常慢(O(nlogn)),而查找最大值为O(n)。
但是,在大多数情况下,让DB服务器完成工作(在您的示例中,使用order by
)应该更快。
答案 1 :(得分:1)
order_by要快得多,特别是如果数据库中有很多条目。