Har*_*oon 5 python mysql sql-server django performance
我对Django查询有一个与性能相关的问题。
假设我有一张有10,000条记录的员工表。现在,如果我要选择5个年龄大于或等于20岁的随机雇员,那么可以说大约有5500名20岁或以上的雇员。django查询将是:
Employee.objects.filter(age__gte=20).order_by('?')[:5]
Run Code Online (Sandbox Code Playgroud)
并且该查询在mysql中的原始副本将是:
SELECT * FROM `database`.`employee`
WHERE `employee`.`age` >= 20
ORDER BY RAND ()
LIMIT 5;
Run Code Online (Sandbox Code Playgroud)
从Django查询的外观看,数据库首先返回5500条记录,然后python以随机或我们选择的任何顺序对这些记录进行排序,并返回前五个记录的大块,而原始查询将仅直接从数据库返回五个记录。
我的问题是两个查询之间是否有性能差异?如果是这样,哪个更好,为什么?
我快速检查了我现有的项目:
queryset = BlahModel.objects.order_by('?')[:5]
print queryset.query
Run Code Online (Sandbox Code Playgroud)
结果是:
SELECT `blah_model`.`id`, `blah_model`.`date` FROM `blah_model` ORDER BY RAND() LIMIT 5;
Run Code Online (Sandbox Code Playgroud)
所以,它们是相同的。
我对结果不会太惊讶,因为 django ORM 是 sql 查询结果和 django 对象之间的直接映射,所以order_by('?')等于ORDER BY RAND(),即使该[:5]语句被翻译为LIMITmysql (这里是doc和doc)。
| 归档时间: |
|
| 查看次数: |
379 次 |
| 最近记录: |