在 django ORM 中以这种方式访问对象时会有性能改进吗?
Will there be any performance improvement when accessing objects this way in django ORM?
我有两个模型,其中包含从一个到另一个的外键。
class M1(models.Model):
name = models.TextField()
class M2(models.Model):
name = models.TextField()
parent = models.ForeignKey(M1, related_name='children')
我正在重构代码以提高性能。
这两个 ORM 查询之间会有任何性能差异吗?
m1 = M1.objects.get(id=1)
children = m1.children.all()
和
children = M2.objects.filter(parent_id=1)
Will there be any performance difference between these 2 ORM queries?
是。在前者中,您进行查询以获取 M1
对象,然后为第二个对象构造一个 QuerySet
。如果您稍后“消费”QuerySet
,那么它将因此进行两次查询。
在后者中你只构造一个个查询集,因此如果你使用这个查询集只进行一个个查询。
如果您因此对 M1
对象不感兴趣,使用后者更好。
我有两个模型,其中包含从一个到另一个的外键。
class M1(models.Model):
name = models.TextField()
class M2(models.Model):
name = models.TextField()
parent = models.ForeignKey(M1, related_name='children')
我正在重构代码以提高性能。
这两个 ORM 查询之间会有任何性能差异吗?
m1 = M1.objects.get(id=1)
children = m1.children.all()
和
children = M2.objects.filter(parent_id=1)
Will there be any performance difference between these 2 ORM queries?
是。在前者中,您进行查询以获取 M1
对象,然后为第二个对象构造一个 QuerySet
。如果您稍后“消费”QuerySet
,那么它将因此进行两次查询。
在后者中你只构造一个个查询集,因此如果你使用这个查询集只进行一个个查询。
如果您因此对 M1
对象不感兴趣,使用后者更好。