在django get / filter查询中,参数的顺序是否重要?

时间:2013-12-24 15:53:59

标签: python database django

我有一个关于在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是否以有效的方式运行,如果本地值已经匹配,则只跟随外键?基本上,这是我能想到的三种可能性:

  • 对所有查询都有效,无论参数顺序如何?
  • 按照您提供参数的顺序对查询进行有效处理吗?
  • 有效地无需查询,检查所有组件并跟踪所有外键,无论顺序如何?
  • 根据每个引擎的能力,在某些数据库上有效,而不是在其他数据库上有效吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您建议的性能优化类型是数据库引擎的任务。 Django将发送一个查询,数据库将尽其所能。以下似乎有一些关于MySQL如何处理查询的详细信息:https://www.informit.com/articles/article.aspx?p=377652&seqNum=2

如果你有大量的数据,找出是否存在差异的最佳方法是衡量它。如果您没有足够的数据来进行有意义的测量,那么结果无关紧要。