MyISAM和Inondb

MyISAM和Innodb的区别:

  1. Innodb支持事务,MyISAM不支持事务。如果在一些列增删改的时候只要哪个出错还可以回滚还原,而MyISAM就不可以。
  2. Innodb适合频繁修改以及涉及安全性较高的应用,MyISAM适合查询和插入为主的应用。
  3. Innodb支持外键,MyISAM不支持外键
  4. Innodb需要指定,MyISAM是默认的引擎
  5. Innodb不支持FULLTEXT类型的索引
  6. Innodb中不保存表的行数,需要扫描一遍整个表来计 算有多少行,但是MyISAM只要简单的读出保存好的行数就好
  7. 对于自增长的字段,Innodb中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立联合索引;清空整个表时,Innodb时一行行的删除,效率非常慢。MyISAM则会重建表

 

django开发中数据库优化

  1. 设计表的时候,尽量少使用外键,因为外键约束会影响插入和删除性能

  2. 使用缓存,减少对数据库的访问
  3. 在orm框架下设置表的时候,能用varchar确定字段长度时,就别用text
  4. 可以给搜索频率高的字段属性,在定义时创建索引
  5. 如果一个页面需要多次连接数据库,最好一次性取出所有需要的数据,减少对数据库的查询次数
  6. 在模板标签中使用with标签可以缓存Qset的查询结果
  7. django orm框架下querysets本来就是有缓存的
  8. 如果一个页面自需要数据库里面的一个或者两个字段的时候,可以用queryset.values()

 

 

django如何提高性能

  1. 减少http请求,减少数据库的访问量
  2. 使用浏览器缓存,将一些常用的css,js,logo图标,这些静态资源缓存到本地浏览器
  3. 对html,css,js文件进行压缩,减少网络的通信量
  4. 搭建服务器集群,将并发访问请求,分散到多台服务器上处理

 

代码优化从哪些方面考虑

  1. 优化算法时间复杂度
  2. 循环优化
  3. 函数选择
  4. 并行编程
  5. 使用性能分析工具
  6. 使用dict或者set查找元素
  7. PyPy
  8. 合理使用copy和deepcopy
  9. 减少冗余数据
  10. 合理的使用生成器

 

数据库索引

数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询,更新数据库表中数据。

索引的实现通常使用B_TREE。B_TREE索引加快了数据访问,因为存储引擎不会再去扫描整张表得到需要的数据;相反,他是从根节点开始,根节点保存了子节点的指针,存储引擎会根据指针快速寻找数据。

 

数据库如何优化查询效率

  1. 存储引擎的选择:如果数据表需要事务处理,应该考虑使用innodb,因为它完全符合ACID特性,如果不需要事务处理,使用默认存储引擎MyISAM是比较好的
  2. 对查询进行优化,要尽量避免进行全表扫描,首先应该考虑where及orderby设计的列上建立索引
  3. 应该避免在where子句中使用!=或者<>操作符,否则将引擎放弃使用索引而进行全表扫描
  4. 应该尽量避免where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描
  5. 应该尽量避免在where使用or来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描
  6. update语句,如果只更改1,2个字段,不要使用update全部字段,否则频繁调用会引起明显的性能消耗,同时带来大量的日志
  7. 对于多张大数据量的表JOIN,要先分页在使用JOIN,否则逻辑度会很高,性能会差
  8. 很多时候考虑用exists代替in
  9. 尽量使用数字型字段
  10. 尽量是哦那个varchar代替char
  11. 不要在where子句中“=”左边进行函数,算术运算或其他表达式运算,否则系统将可能无法正确使用索引
  12. 尽量使用表变量来代替临时表
  13. 尽量避免使用游标,因为游标的效率较差
  14. 避免频繁创建和删除临时表,以减少系统表资源的消耗
  15. 尽量避免大事务操作,提高系统并发能力
  16. 尽量避免向客户端返回大数据量,如果数据量过大,应该考虑吧相应需求是否合理

 

数据库的优化

优化索引、SQL语句、分析慢查询

设计表的时候严格根据数据库的设计范式来设计数据库

使用缓存,把经常访问到的数据而且不需要经常变化的数据放在缓存中,能节约磁盘IO

优化硬件;采用SSD,使用磁盘队列技术等

采用MySQL内部自带的表分区技术,把数据分层不同的文件,能够提高磁盘的读取效率

主从分离读写,采用主从复制把数据库的读操作和写入操作分离

使用合适的表引擎,参数上的优化

进行架构级别的缓存,静态化和分布式

不采用全文索引

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值