注意:select_related() 仅作用于 ForeignKey 和 OneToOne,如果是 ManyToMany 字段,则需要用到下面的 prefetch_related() 函数。 prefetch_related() prefetch_related() 和 select_related() 作用类似,都是通过减少查询的次数,来实现查询优化。 但prefetch_relate
使用select_related方法虽然能提升性能,但终究做了一次连表查询,在同等条件下,连表查询性能是低于单表查询的。所以prefetch_related就应运而生了。它会先执行子表的查询,然后通过计算得出结果关键外键的唯一值列表(可以理解为对所有关联外键进行set操作去除重复值),然后通过IN条件再从关联表中查询数据并放到内存中。示...
当你查询单个主对象或主对象列表并需要在模板或其它地方中使用到每个对象的关联对象信息时,请一定记住使用select_related和prefetch_related一次性获取所有对象信息,从而提升数据库查询效率,避免重复查询。如果不确定是否有重复查询,可使用django-debug-toolbar查看。 对与单对单或单对多外键ForeignKey字段,使用select_relate...
Django考虑到了这一点,所以提供select_related和prefetch_related方法来提升数据库查询效率,类似于SQL的JOIN方法。 select_related方法 select_related将会根据外键关系(注意: 仅限单对单和单对多关系),在执行查询语句的时候通过创建一条包含SQL inner join操作的SELECT语句来一次性获得主对象及相关对象的信息。现在我们...
prefetch_related() 和 select_related() 作用类似,都是通过减少查询的次数,来实现查询优化。 但prefetch_related() 是针对 ManyToMany 的操作。 举个例子: from django.db import modelsclass Topping(models.Model): name = models.CharField(max_length=30)class Pizza(models.Model): name = models.CharField(...
原文链接:Django笔记十一之外键查询优化select_related和prefetch_related 本篇笔记目录如下: select_related prefetch_related 在介绍 select_related 和 prefetch_related 这两个函数前,我们先来看一个例子。 对于,Entry 和 Blog 这两个 model,前面介绍过,Blog 是 Entry 的外键,如下: class Blog(models.Model): na...
prefetch_related() 和 select_related() 作用类似,都是通过减少查询的次数,来实现查询优化。 但prefetch_related() 是针对 ManyToMany 的操作。 举个例子: from django.db import models class Topping(models.Model): name = models.CharField(max_length=30) ...
在Django中,可以使用select_related和prefetch_related这两个方法来优化查询性能。 select_related: select_related方法可以在查询时一次性加载关联对象的数据,避免多次查询数据库,从而提高性能。使用select_related可以减少数据库的查询次数,特别是在查询关联对象的外键字段时非常有用。
2prefetch_related 在介绍 select_related 和 prefetch_related 这两个函数前,我们先来看一个例子。 对于,Entry 和 Blog 这两个 model,前面介绍过,Blog 是 Entry 的外键,如下: Plain Text 复制代码 99 1 2 3 4 5 6 7 8 9 10 11 12
prefetch_related()和select_related()的设计目的很相似,都是为了减少SQL查询的数量,但是实现的方式不一样。后者是通过JOIN语句,在SQL查询内解决问题。但是对于多对多关系,使用SQL语句解决就显得有些不太明智,因为JOIN得到的表将会很长,会导致SQL语句运行时间的增加和内存占用的增加。prefetch_related()的解决方法是,...