注意:select_related() 仅作用于 ForeignKey 和 OneToOne,如果是 ManyToMany 字段,则需要用到下面的 prefetch_related() 函数。 prefetch_related() prefetch_related() 和 select_related() 作用类似,都是通过减少查询的次数,来实现查询优化。 但prefetch_related() 是针对 ManyToMany 的操作。 举个例子: fromdja...
注意:select_related() 仅作用于 ForeignKey 和 OneToOne,如果是 ManyToMany 字段,则需要用到下面的 prefetch_related() 函数。 prefetch_related() prefetch_related() 和 select_related() 作用类似,都是通过减少查询的次数,来实现查询优化。 但prefetch_related() 是针对 ManyToMany 的操作。 举个例子: 当...
select_related是 Django ORM(对象关系映射)中的一个查询优化方法,主要用于减少数据库查询次数,特别是在处理一对一(OneToOneField)和多对一(ForeignKey)关系时。通过select_related,Django 可以在一次查询中获取所有相关联的对象,而不是分别查询每个对象。 基础概念 ...
book=Book.objects.select_related("author__hometown").get(id=4)person=book.author city=person.hometown 因为我们在第一步查询的时候,通过双下划线将两个外键字段连接在一起取了出来,所以在第二步和第三步取 Person 数据和 City 数据的时候,就不需要再次查询数据库了。 同时获取多个外键关联字段 如果一个 mo...
为了验证 select_related() 确实会只查询一遍数据库,有两种方法: 一种是在数据库层面打印出来所有查询的 SQL语句, 另一种可以从侧面表示,那就是在系统层面打印出我们的查询条件转化的 SQL 语句。 比如: Entry.objects.select_related("blog").all().query.__str__() 可以看到会输出一个 关联了 Blog 表的 ...
原文链接:Django笔记十一之外键查询优化select_related和prefetch_related 本篇笔记目录如下: select_related prefetch_related 在介绍 select_related 和 prefetch_related 这两个函数前,我们先来看一个例子。 对于,Entry 和 Blog 这两个 model,前面介绍过,Blog 是 Entry 的外键,如下: class Blog(models.Model): na...
select_related可以接收多个参数用于对多个关联表的连表查询。注意如果不需要对第三张表进行操作的话,则应该避免使用select_related方法,因为连表查询同样消耗时间。 prefetch_related方法# 使用select_related方法虽然能提升性能,但终究做了一次连表查询,在同等条件下,连表查询性能是低于单表查询的。所以prefetch_related...
一、select_related查询优化 select_related通过多表join关联查询,一次性获得所有数据,通过降低数据库查询次数来提升性能,但关联表不能太多,因为join操作本来就比较消耗性能。本文通过Django debug toolbar工具来直观显示查询次数、查询语句,如果不会使用“Django debug toolbar”工具,可以翻看我之前写的博客,从而配置它!
1. Django ORM查询中select_related和prefetch_related的区别?? def select_related(self, *fields) 性能相关:表之间进行join连表操作,一次性获取关联的数据。 总结: 1. select_related主要针一对一和多对一关系进行优化。 2. select_related使用SQL的JOIN语句进行优化,通过减少SQL查询的次数来进行优化、提高性能。
在Django框架中, select_related 是一个查询优化工具,用于数据库查询时减少数据库访问次数,提高查询效率。当你在进行数据库查询时,如果需要访问关联模型的字段, select_related 可以确保这些字段在同一个数据库查询中被获取,而不是在每次访问相关对象时单独进行查询。