【问题标题】:Which is more efficient filter query in django and why?django 中哪个过滤器查询更有效,为什么?
【发布时间】:2021-08-03 10:42:50
【问题描述】:
1:Model1.object.filter(column1="XYZ").filter(column2="ABC")
2:Model1.object.filter(column1="XYX", column2="ABC")
在这两者中,在时间和数据库调用次数方面哪个更有效?
【问题讨论】:
标签:
python
django
django-models
django-rest-framework
【解决方案1】:
在这两者中,在时间和数据库调用次数方面哪个更有效?
两者都会产生 same 查询,除非column1 是一对多或多对多字段,但它不是模型对象的列。两者都会产生如下查询:
SELECT appname_model1.*
FROM appname_model1
WHERE column1 = "XYZ" AND column2 = "ABC"
第二个项目的效率可能会稍微高一些,因为它会评估对过滤器方法的两次调用,但这只是几个 CPU 周期的问题。
【解决方案2】:
您可以使用QuerySet API 查看生成的实际 sql 查询:
print(Model1.object.filter(column1="XYZ").filter(column2="ABC").query)
print(Model1.object.filter(column1="XYX", column2="ABC").query)
你会发现查询是一样的。