数据库查询优化
only与defer
select_related与prefetch_related
orm语句的特点:惰性查询
不使用查询结果,就不执行语句
res = models.Book.objects.only('title')
for i in res:
print(i.title)
print(i.price)
res = models.Book.objects.defer('title')
for i in res:
print(i.price)
res = models.Book.objects.select_related('authors')
select_related内部直接先将book与publish连起来 然后一次性将大表里面的所有数据
全部封装给查询出来的对象
这个时候对象无论是点击book表的数据还是publish的数据都无需再走数据库查询了
select_related括号内只能放外键字段 一对多 一对一 多对多不行
res = models.Book.objects.prefetch_related('publish')
prefetch_related该方法内部其实就是子查询
将子查询查询出来的所有结果也封装到对象中
感觉好像一次性搞定的
数据库三大设计范式
数据库三大设计范式:
对数据在数据库中的存储进行规范,减少数据之间的冗余,耦合。
什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。
第一范式:1nf,每个字段都不可再分割为多个字段,原子性
第二范式:2nf,满足第一范式,所有 非主键字段,都依赖 主键字段;数据列中出现数据重复,就要把表拆分
第三范式,3nf,满足第二范式,所有 非主键字段,都直接依赖 主键字段,而没有间接依赖
三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。
参考博客:
https://www.cnblogs.com/knowledgesea/p/3667395.html
https://blog.csdn.net/dosthing/article/details/87954213
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现