2014-01-16 48 views
1

我试图找到一个查询集最高成本项目,我只是想知道以下哪些(如果任一)为更有效迭代VS ORDER_BY()效率

items = Item.objects.all() 

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

我不是超级关注表现,我只是好奇而已。

+2

我相信这倒到在你的数据库等项目的ammount的,你随时可以测试和检查时间。 – petkostas

回答

2

首先,你可以简单地使用Django的Maxaggregation

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

其次,你的问题的答案取决于各种因素。例如。如果表格非常大(很多记录或特别大的记录),则需要避免在仅需要一个(第一个查询)的情况下检索它们。但是,如果表中有数百万条记录,并且按顺序排列的列没有索引,排序可能非常慢(O(nlogn)),而查找最大值为O(n)。

在大多数情况下,然而,让DB服务器做的工作(在你的榜样,用order by)应该会更快。

1

ORDER_BY的速度要快得多,特别是如果你在数据库中的条目。