一:数据库查询优化

  • only与defer的数据查询优化

  • select_related与prefetch_related数据查询优化

1.ORM语句特点
  1. 惰性查询
  2. 如果你仅仅只是书写了orm语句 在后面根本没有用到该语句所查询出来的参数
  3. 那么orm会自动识别 直接不执行
  4. 示例:
  5. res = models.Book.objects.all()
  6. print(res) # 要用数据了才会走数据库
2.only
  1. # 实现获取到的是一个书籍对象 然后点title就能够拿到书名 并且没有其他字段
  2. res = models.Book.objects.only('title')
  3. # res = models.Book.objects.all()
  4. for i in res:
  5. print(i.title) # 点击only括号内的字段 不会走数据库
  6. # print(i.price) # 点击only括号内没有的字段 会重新走数据库查询
  7. # 而all不需要走数据库

3.defer
  1. # 对象除了没有title属性之外 其他的都有,除了title走数据库,其他都不需要走数据库
  2. res = models.Book.objects.defer('title')
  3. for i in res:
  4. print(i.title)
4.only与defer区别
  1. deferonly刚好相反
  2. defer括号内的字段不在查询出来的对象里面 查询该字段需要重新走数据
  3. 而如果查询的是非括号内的时候 则不需要走数据库
5.select_related与prefetch_related
6.select_related
  1. # 拿到每一本书对应的出版社
  2. res = models.Book.objects.select_related('publish') # INNER JOIN
  3. for i in res:
  4. print(i.publish.name)

7.select_related概括
  1. 1.select_related内部直接先将bookpublish连接起来
  2. 2.然后一次性将大表里面的所有数据全部封装给查询出来的对象
  3. 3.这个时候对象无论是点击book表数据还是publish的数据都无需再走数据库查询了
  4. select_related括号内只能放外键字段 一对一 一对一
  5. 多对多也不支持
8.prefetch_related
  1. res = models.Book.objects.prefetch_related('publish') # 子查询
  2. for i in res:
  3. print(i.publish.name)
9.prefetch_related概括
  1. prefetch_related该方法内部其实就是子查询
  2. 将子查询查询出来的所有结果也给你封装到对象中
  3. 给你的感觉好像也是一次性搞定的
10.select_related与prefetch_related区别
  1. select_related:
  2. 相当于是INNER JOIN 将两张表拼接起来!
  3. prefetch_related:
  4. 相当于是 子查询 分布查询!

ORM数据库查询优化only与defer(select_related与prefetch_related)的更多相关文章

  1. Django框架之第八篇(模型层补充)--数据库的查询与优化:only/defer,select_related与prefetch_related,事务

    在设置外键字段时需要注意: 当你使用django2.x的版本时候,在建立外键关系时,需要你手动添加几个关键点参数 models.cascade #设置级联删除 db_constraints 数据库查询 ...

  2. django之ORM的查询优化、Ajax 06

    目录 ORM查询优化 only与defer select_related与prefetch_related查询优化 choices参数 MTV与MVC模型 Ajax简介 AJAX常见应用情景 AJAX ...

  3. ORM中聚合函数、分组查询、Django开启事务、ORM中常用字段及参数、数据库查询优化

    聚合函数 名称 作用 Max() 最大值 Min() 最小值 Sum() 求和 Count() 计数 Avg() 平均值 关键字: aggregate 聚合查询通常都是配合分组一起使用的 关于数据库的 ...

  4. python---django中orm的使用(5)数据库的基本操作(性能相关:select_related,和prefetch_related重点)(以及事务操作)

    ################################################################## # PUBLIC METHODS THAT ALTER ATTRI ...

  5. Django数据库查询优化与AJAX

    目录 数据库设计三大范式 orm相关的数据库查询优化 惰性查询 all.only与defer select_related与prefetch_related MTV与MVC模型 MTV(models ...

  6. Django常用字段及参数、事务、数据库查询优化

    常用字段 注意: Django中没有设置对应char类型的字段,但可以支持自己定义. 自定义对应于数据库的char类型字段: from django.db.models import Field cl ...

  7. Django数据库查询优化-事务-图书管理系统的搭建

    数据库查询优化 优化:虽然减轻了数据库的压力,但查询速度大大的减慢 ORM内所有的语句操作,默认都是惰性查询,只有你在真正的需要数据的时候才会走数据, 如果你只是写ORM语句时,是不会走数据库的,这样 ...

  8. Django 数据库查询优化

    Django数据层提供各种途径优化数据的访问,一个项目大量优化工作一般是放在后期来做,早期的优化是“万恶之源”,这是前人总结的经验,不无道理.如果事先理解Django的优化技巧,开发过程中稍稍留意,后 ...

  9. Android高性能ORM数据库DBFlow入门

    DBFlow,综合了 ActiveAndroid, Schematic, Ollie,Sprinkles 等库的优点.同时不是基于反射,所以性能也是非常高,效率紧跟greenDAO其后.基于注解,使用 ...

  10. 数据库查询优化器的艺术:原理解析与SQL性能优化

    数据库查询优化器的艺术 作者:李海翔 Oracle公司MySQL全球开发团队.资深专家 简单的浏览了一遍,由于以前没有接触过SQL优化这些知识,读起来还是非常吃力的,不过收获还是很大的. 作者通过对M ...

随机推荐

  1. LeetCode - 数组的改变和移动

    1. 数组的改变和移动总结 1.1 数组的改变 数组在内存中是一块连续的内存空间,我们可以直接通过下标进行访问,并进行修改. 在Java中,对于List类型来说,我们可以通过set(idx, elem ...

  2. NSIS 去除字串中的汉字

    !include "LogicLib.nsh" XPStyle on !include "WordFunc.nsh" #编写,水晶石 #去除字串中的汉字 #本例 ...

  3. PHP全栈开发(五):PHP学习(2. echo 和 print 输出、数组、foreach循环、字符串)

    在PHP中有两个基本的输出语句,就是echo 和 print 这两个东东有什么不同呢. echo 可以一次输出一个或者多个字符: echo "这是一个", "字符串,&q ...

  4. GMOJ5673 爬山法 题解

    Solution 显然先想到处理出每个点能看到的最高的顶点. 然后考虑模拟题目的过程,一段一段走时间复杂度显然不够优秀. 考虑我们要求什么,我们需要求出\(u\)到\(v\)的最近的一个点,使得这个点 ...

  5. SpringBoot(五) - Java8 新特性

    1.Lambda表达式 Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递).使用它可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风 ...

  6. 8.MongoDB系列之创建副本集(一)

    1. 复制简介 在MongoDB中,创建副本集后就可以使用复制功能了,副本集是一组服务器,其中一个是用于处理写操作的主节点,还有多个用于保存主节点的数据副本的从节点,如果主节点崩溃了,则从节点会从中选 ...

  7. Vue学习之--------Vue中收集表单数据(使用v-model 实现双向数据绑定、代码实现)(2022/7/18)

    文章目录 1.Vue中实现表单数据的收集 1.1 基础知识 1.2 代码实例 1.3 测试效果 1.4 额外插一嘴 1.Vue中实现表单数据的收集 1.1 基础知识 表单中常用的标签:input(输入 ...

  8. python实现多接口翻译软件

    本实验用pyqt5做了一个小软件,里面使用了市面上主流的6种翻译软件接口:谷歌.百度.有道.金山词霸.腾讯.必应,界面如图所示: 以下是程序代码: import time,sys,os,hashlib ...

  9. 题解 AT2361 [AGC012A] AtCoder Group Contest

    \(\sf{Solution}\) 显然要用到贪心的思想. 既然最终的结果只与每组强度第二大选手有关,那就考虑如何让他的值尽可能大. 其实,从小到大排个序就能解决,越靠后的值越大,使得每组强度第二大选 ...

  10. Kafka 架构和原理机制 (图文全面详解)

    目录 一:Kafka 简介 二:Kafka 基本架构 三:Kafka 基本原理 四:Zookeeper 在 kafka 的作用 五:Kafka 的特性 六:Kafka 的应用场景 一:Kafka 简介 ...