gpt4 book ai didi

python - Django 查询性能

转载 作者:可可西里 更新时间:2023-11-01 07:06:59 24 4
gpt4 key购买 nike

我有一个关于 Django 查询的与性能相关的问题。

假设我有一张包含 10,000 条记录的员工表。现在,如果我想随机选择 5 名年龄大于或等于 20 岁的员工,假设有 5,500 名员工年龄在 20 岁或以上。 Django 查询将是:

Employee.objects.filter(age__gte=20).order_by('?')[:5]

这个查询在 mysql 中的原始对应将是:

SELECT * FROM `database`.`employee` 
WHERE `employee`.`age` >= 20
ORDER BY RAND ()
LIMIT 5;

从 django 查询的外观来看,数据库首先返回 5,500 条记录,然后 python 随机或我们选择的任何顺序对这些记录进行排序,并返回前五个记录的 block ,而原始查询将仅从数据库返回五个记录直接。

我的问题是这两个查询之间是否存在任何性能差异?如果是这样,哪个更好,为什么?

最佳答案

我快速检查了我现有的项目:

queryset = BlahModel.objects.order_by('?')[:5]
print queryset.query

结果是:

SELECT `blah_model`.`id`, `blah_model`.`date` FROM `blah_model` ORDER BY RAND() LIMIT 5;

所以,它们是一样的。

我不会对结果太惊讶,因为django ORM是sql查询结果和django对象之间的直接映射,所以order_by('?')会等于 ORDER BY RAND(),甚至 [:5] 语句在 mysql 中被转换为 LIMIT(这里是 docdoc)。

关于python - Django 查询性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32534687/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com