Python 从模型和外部模型调用值之间的性能差异
这两种查询之间的性能差异有多大 假设我有这3种型号:Python 从模型和外部模型调用值之间的性能差异,python,django,django-templates,django-orm,Python,Django,Django Templates,Django Orm,这两种查询之间的性能差异有多大 假设我有这3种型号: class Brand(models.Model): brand_name = models.CharField() class Model(models.Model): brand = Models.ForeignKey(Brand) model_name = models.CharField() class Listing(models.Model): model = Models.ForeignKey
class Brand(models.Model):
brand_name = models.CharField()
class Model(models.Model):
brand = Models.ForeignKey(Brand)
model_name = models.CharField()
class Listing(models.Model):
model = Models.ForeignKey(Model)
listing_info = models.CharField()
我在模板中显示了数千个列表,我想显示每个列表的品牌名称和型号名称
在模板中,我列出如下内容:
<p>{{ listing.model.brand.brand_name }}</p>
<p>{{ listing.model.model_name }}</p>
<p>{{ listing.listing_info }}</p>
然后在模板中,我可以简单地列出如下内容:
<p>{{ listing.brand_name }}</p>
<p>{{ listing.model_name }}</p>
<p>{{ listing.listing_info }}</p>
{{listing.brand_name}
{{listing.model_name}
{{listing.listing_info}
除了数据复制问题之外,两种设置之间的性能差异有多大?如果使用,Django将在获取列表的同时获取相关的型号
和品牌
数据
Listing.objects.filter().select_related('model', 'model__brand')
例如,假设您有100个列表。如果没有select_related
,将有201个查询(1个查询获取所有列表,100个查询获取每个列表的型号,100个查询获取每个型号的品牌)。使用select\u related
,在一个查询中获取所有内容
理论上,对数据进行非规范化(复制列表
模型中的属性)可能会提供进一步的性能优势,但改进可能微不足道。你必须测量它才能看到。大多数情况下,使用select_related
就足够了。如果使用,Django将在获取列表的同时获取相关的模型
和品牌
数据
Listing.objects.filter().select_related('model', 'model__brand')
例如,假设您有100个列表。如果没有select_related
,将有201个查询(1个查询获取所有列表,100个查询获取每个列表的型号,100个查询获取每个型号的品牌)。使用select\u related
,在一个查询中获取所有内容
理论上,对数据进行非规范化(复制列表
模型中的属性)可能会提供进一步的性能优势,但改进可能微不足道。你必须测量它才能看到。大多数情况下,使用select\u related
就足够了