我在问什么:如果我需要从 db 中提取前 10 条最新新闻。我找到了唯一的方法
News.objects.all().order_by('-pub_date')[:10]
但它安全吗?这个建筑如何运作?它会从数据库中获取所有新闻记录,然后对它们进行排序,然后只取 10 条吗?或者它会优化查询并且只从数据库中获取 10 条最新记录?这很重要,因为我在数据库中确实有超过 1000 条新闻记录,并且从数据库中获取它们需要很长时间,甚至需要更长的时间来对它们进行排序。
我在问什么:如果我需要从 db 中提取前 10 条最新新闻。我找到了唯一的方法
News.objects.all().order_by('-pub_date')[:10]
但它安全吗?这个建筑如何运作?它会从数据库中获取所有新闻记录,然后对它们进行排序,然后只取 10 条吗?或者它会优化查询并且只从数据库中获取 10 条最新记录?这很重要,因为我在数据库中确实有超过 1000 条新闻记录,并且从数据库中获取它们需要很长时间,甚至需要更长的时间来对它们进行排序。
这是安全的QuerySets as lazy。在您的情况下,最多将获取 10 个对象,因为数据库查询将被优化为仅从数据库返回 10 条记录。
您可以阅读有关何时评估 QuerySet和限制 QuerySet的更多信息(本节处理切片 QuerySet,这就是您正在做的事情)。