prefetch_related() 和 select_related() 作用类似,都是通过减少查询的次数,来实现查询优化。 但prefetch_related() 是针对 ManyToMany 的操作。 举个例子: from django.db import models class Topping(models.Model): name = models.CharField(max_length=30) class Pizza(models.Model): name = models.CharFiel...
注意:select_related() 仅作用于 ForeignKey 和 OneToOne,如果是 ManyToMany 字段,则需要用到下面的 prefetch_related() 函数。 prefetch_related() prefetch_related() 和 select_related() 作用类似,都是通过减少查询的次数,来实现查询优化。 但prefetch_related() 是针对 ManyToMany 的操作。 举个例子: fromdja...
Django考虑到了这一点,所以提供select_related和prefetch_related方法来提升数据库查询效率,类似于SQL的JOIN方法。 select_related方法 select_related将会根据外键关系(注意: 仅限单对单和单对多关系),在执行查询语句的时候通过创建一条包含SQL inner join操作的SELECT语句来一次性获得主对象及相关对象的信息。现在我们对...
在Django中,可以使用select_related和prefetch_related这两个方法来优化查询性能。 select_related: select_related方法可以在查询时一次性加载关联对象的数据,避免多次查询数据库,从而提高性能。使用select_related可以减少数据库的查询次数,特别是在查询关联对象的外键字段时非常有用。 示例代码如下: frommyapp.modelsimport...
select_related可以接收多个参数用于对多个关联表的连表查询。注意如果不需要对第三张表进行操作的话,则应该避免使用select_related方法,因为连表查询同样消耗时间。 prefetch_related方法# 使用select_related方法虽然能提升性能,但终究做了一次连表查询,在同等条件下,连表查询性能是低于单表查询的。所以prefetch_related...
prefetch_related方法 对于多对多字段,你不能使用select_related方法,这样做是为了避免对多对多字段执行JOIN操作从而造成最后的表非常大。Django提供了prefect_related方法来解决这个问题。prefect_related可用于多对多关系字段,也可用于反向外键关系(related_name)。我们对之前的article_list视图函数再做进一步修改,在查询文...
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 必须创建 ID 列表并将其发送回服务器,这可能需要一段时间。我不确定在交易中是否有这样做的好方法,但我的理解是 Django 总是只发送一个列表并说 SELECT … WHERE pk IN (…,…,…)基本上。在这种情况下,如果...
一、select_related查询优化 select_related通过多表join关联查询,一次性获得所有数据,通过降低数据库查询次数来提升性能,但关联表不能太多,因为join操作本来就比较消耗性能。本文通过Django debug toolbar工具来直观显示查询次数、查询语句,如果不会使用“Django debug toolbar”工具,可以翻看我之前写的博客,从而配置它!