首页 > 解决方案 > 在 django ORM 中以这种方式访问​​对象时会有任何性能改进吗?

问题描述

我有两个模型,其中包含从一个到另一个的 ForeignKey。

class M1(models.Model):
    name = models.TextField()

class M2(models.Model):
    name = models.TextField()
    parent = models.ForeignKey(M1, related_name='children')

我正在重构代码以提高性能。

这 2 个 ORM 查询之间是否会有任何性能差异。

m1 = M1.objects.get(id=1)
children = m1.children.all()

children = M2.objects.filter(parent_id=1)

标签: djangodjango-modelsdjango-rest-frameworkdjango-viewsdjango-orm

解决方案


这 2 个 ORM 查询之间会有任何性能差异吗?

的。在前者中,您进行查询以获取M1对象,然后QuerySet为第二个构造 a。如果您稍后“使用” QuerySet,那么它将进行两个查询。

在后者中,您只构建一个查询集,因此如果您使用该查询集,则只进行一个查询。

如果您因此对该对象不感兴趣,则M1使用后者会更好。


推荐阅读