我有一个关于在Django中优化获取和过滤器的问题。我认为我的预感是正确的,但我找不到任何确认。
在get()
或filter()
查询上应用多个约束,并且这些约束中的一个或多个是外键或m2m对象时,约束的顺序是否对效率有影响?示例语句,用于查找名称为Bob且其父亲姓名也是Bob的子项:如果Django首先检查每个Child以查看其名称是否为“Bob”,如果不是,则不会检查父亲是否有效名称。我可以做出略有不同的查询:Child.objects.filter(name="Bob", father__name="Bob")
和Child.objects.filter(father__name="Bob",name="Bob")
。
所以,我的问题是,Django是否以有效的方式运行,如果本地值已经匹配,则只跟随外键?基本上,这是我能想到的三种可能性:
谢谢!
答案 0 :(得分:1)
您建议的性能优化类型是数据库引擎的任务。 Django将发送一个查询,数据库将尽其所能。以下似乎有一些关于MySQL如何处理查询的详细信息:https://www.informit.com/articles/article.aspx?p=377652&seqNum=2
如果你有大量的数据,找出是否存在差异的最佳方法是衡量它。如果您没有足够的数据来进行有意义的测量,那么结果无关紧要。