Django 数据库访问性能优化
使用标准的数据库优化技术:
在进行Django数据库访问性能优化之前,首先应该使用标准的数据库技术对其进行优化,比如给字段加索引,通过使用
django.db.models.Field.db_index来给一个Django模型类的字段加索引,设置这个属性字段的Field.db_index=True。注:django对model中的
fk和unique = True的字段将自动创建索引。理解Django中QuerySet的工作机制对数据库访问优化至关重要:
QuerySet是懒加载的,它只有在需要的时候才会被执行,并且会将执行的结果保存在内存中。
理解Django中QuerySet的缓存机制:
QuerySet对调用方法是不执行缓存的。比如下面的两端代码,其中一个会被缓存,另一个不会:
>>> entry = Entry.objects.get(id=1) >>> entry.blog # Blog对象会被从数据库查询出来 >>> entry.blog # 第二次访问的缓存对象,不会再次执行查询但是对于调用的查询方法,是不会被缓存的:
>>> entry = Entry.objects.get(id=1) >>> entry.authors.all() # 第一次会执行查询 >>> entry.authors.all() # 第二次会再执行一次查询使用模板语言中的with标签:
在视图模板中,针对QuerySet对象使用
with标签,可以让数据被缓存起来使用。使用
iterator()方法:对于缓存的QuerySet使用
iterator()方法。将查询计算操作放在数据库中完成,不要在Python代码中完成。
使用
filter,exclude完成查询过滤;F()查询表达式;使用聚合函数来完成数据库聚合操作。
使用
QuerySet.extra()明确的指出要查询的字段。对于复杂的数据库查询操作,使用原生SQL实现。
尽量一次查询出所有需要的信息。
只查询需要的数据:
某些情况下,只使用
QuerySet.values()和values_list()方法,查询出符合条件的结果集而不是完整的对象结果集;某些情况下,只使用
QuerySet.defer()和only()过滤数据。
如果只是查询集合的数量,使用
QuerySet.count()函数,而不是len(QuerySet);如果想知道某个记录是否包含在某个结果集中,使用
QuerySet.exists()函数;避免过多的使用
count()和exists()函数;对于批量更新和删除操作使用
QuerySet.update()和QuerySet.delete();理解
QuerySet.select_related()方法:select_related()会在查询过程中尽量深入的查询关联数据,这样在需要查询大量外键的数据时非常有用,如:
>>> e=Entry.objects.get(id=5) #这部操作会查询数据库 >>> b=e.blog #该操作会再次查询数据库而采用
select_related()查询的效果是:
>>> e=Entry.objects.select_related().get(id=5) #这步操作会查询数据库 >>> b=e.blog #不会再次查询数据库如果需要查询对象的外键,则使用外键字段而不是使用关联的对象的主键,比如:
>>> entry.blog_id #应该使用这种方式 >>> entry.blog.id #不要使用这种方式
Django 数据库访问性能优化的更多相关文章
- 数据库访问性能优化 Oracle
特别说明: 1. 本文只是面对数据库应用开发的程序员,不适合专业DBA,DBA在数据库性能优化方面需要了解更多的知识: 2. 本文许多示例及概念是基于Oracle数据库描述,对于其它关系型数据库也 ...
- Oracle学习总结(8)—— 面向程序员的数据库访问性能优化法则
特别说明: 1. 本文只是面对数据库应用开发的程序员,不适合专业DBA,DBA在数据库性能优化方面需要了解更多的知识: 2. 本文许多示例及概念是基于Oracle数据库描述,对于其它关系型数据库也 ...
- spring配置druid连接池和监控数据库访问性能
Druid连接池及监控在spring配置如下: <bean id="dataSource" class="com.alibaba.druid.pool.DruidD ...
- 【转载】HBase 数据库检索性能优化策略
转自:http://www.ibm.com/developerworks/cn/java/j-lo-HBase/index.html 高性能 HBase 数据库 本文首先介绍了 HBase 数据库基本 ...
- 【Spring Boot&&Spring Cloud系列】提高数据库访问性能
前言 使用关系型数据库的应用系统的性能瓶颈最终还是数据库.随着业务的迅速增长,数据量会不断增大,会逐渐暴露关系型数据库的弱点,性能会大幅度的降低 项目地址:https://github.com/And ...
- Java面试准备十六:数据库——MySQL性能优化
2017年04月20日 13:09:43 阅读数:6837 这里只是为了记录,由于自身水平实在不怎么样,难免错误百出,有错的地方还望大家多多指出,谢谢. 来自MySQL性能优化的最佳20+经验 为查询 ...
- 数据库SQL性能优化
1.in与exists的效率比较 in是把外表和内表作hash 连接,而exists 是对外表作loop 循环,每次loop 循环再对内表进行查询.一直以来认为exists 比in 效率高的说法是不准 ...
- oracle数据库应用性能优化经验(培训讲义)
这是我给公司同事做的内部培训ppt的讲义,给大家分享一下.这是培训大纲,ppt在找地方上传,等找到了会把链接发在这里 . 暂时放在csdn上,赚点下载积分:https://download.csdn. ...
- HBase 数据库检索性能优化策略--转
https://www.ibm.com/developerworks/cn/java/j-lo-HBase/index.html HBase 数据表介绍 HBase 数据库是一个基于分布式的.面向列的 ...
随机推荐
- Docker Learning Notes
Docker简介 是什么 问题:为什么会有docker出现 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置.作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的 ...
- WORKDIR 指定工作目录 每一个 RUN 都是启动一个容器、执行命令、然后提交存储层文件变更
WORKDIR 指定工作目录 格式为 WORKDIR <工作目录路径>. 使用 WORKDIR 指令可以来指定工作目录(或者称为当前目录),以后各层的当前目录就被改为指定的目录,如该目录不 ...
- 使用Vue时localhost:8080中localhost换成ip地址后无法显示页面的问题
解决办法是:在package.json中 然后重新启动服务器 npm run dev 就正常显示了.
- css属性书写顺序(重点)
- ISR high memory参数
1.通过 show process memory 获取的数据参数解释: 来自 <http://blog.router-switch.com/2013/12/show-processes-memo ...
- sql语句插入时提示:“Duplicate entry 'XXX' for key 1 ” 是什么原因?
你用的是MYSQL 数据库吧? 1:提示信息翻译:插入 xxx 使索引1重复分析:索引如果是primary unique这两两种,那么数据表的数据对应的这个字段就必须保证其每条记录的唯一性.否则就会产 ...
- IIS 配置迁移
使用管理员身份运行cmd 应用程序池: # 导出所有应用程序池 %windir%\system32\inetsrv\appcmd list apppool /config /xml > c:\a ...
- 【摘录自MDN】客户端和服务器
客户端和服务器 连接到互联网的计算机被称作客户端和服务器.下面是一个简单描述它们如何交互的图表: 客户端是典型的Web用户入网设备(比如,你连接了Wi-Fi的电脑,或接入移动网络的手机)和设备上可联网 ...
- 2 CSS盒子模型&边框&轮廓&外边距&填充&分组嵌套&尺寸&display与visibility
盒子模型 Box Model 所有HTML元素可以看做盒子,CSS模型本质上是一个盒子,封装周围的HTML元素 包括:边距,边框,填充和实际内容 盒子模型允许我们在其他元素和周围元素边框之间的空间放 ...
- 1014 Waiting in Line (30分)
1014 Waiting in Line (30分) Suppose a bank has N windows open for service. There is a yellow line i ...