python – Django查询性能

关于
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随机或按我们选择的顺序对这些记录进行排序,并返回前五个记录的块,而原始查询将直接从数据库返回五条记录.

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

最佳答案 我快速检查了我现有的项目:

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).

点赞