数据性能优化
来源:互联网 发布:三星的笔记本电脑知乎 编辑:程序博客网 时间:2024/05/22 00:09
web 优化过程中瓶颈网在数据库,尽管我们尽量使用一些机制来避免数据库访问,但在一些情况下我们仍旧需要访问数据库
1.缓存的创建和过期后重建
2.数据库写操作
3.没有使用缓存机制
通过时用mysqlreport 我们可以较为清晰的查看当前数据库的状态
索引
定义
通过目录直接找到内容的方式,在数据库中称为索引。
副作用
如果查找的记录占据整个数据表的很大比例,那么使用索引扫描反而性能更差。
索引高效的原因
索引本身的数据结构(Mysql使用BTree、Hash以及RTree)觉定了他们拥有非常高效的查找算法。
索引分类
普通索引、唯一索引、主键索引、全文索引等
我们可以通过explain 来查看sql 语句运行状况,查看是否使用索引
组合索引对于一些查询会产生误导,因为组合索引的基本原则是“最左前缀”
key1,key2,key3的组合索引
SELECT * FROM goods WHERE key1=k1 ORDER BY key2,key3 符合 效率好
SELECT * FROM goods WHERE key2=k2 不符合 效率差
总之不是量身定做的组合索引反而会给查询带来更大的负担
因为数据库还会按照索引进行查询
Innodb与MyISAM数据库的区别在于....<待定>
可以用慢查询分析工具可以查看慢查询sql
索引缓存
数据表的索引也可以缓存起来,它是放在内存中,索引可以在内存中查找,不需要访问磁盘
MyISAM 表
frm 存储表的结构信息
MYD 存储表中的数据
MYI 存储表中的索引
由于存在索引缓存机制,MyISAM对于索引的写操作必然存在延迟,这是为了减少磁盘访问,但是如果数据库崩溃的时候有些索引没有来的及写入磁盘,将会丢失索引,从而导致数据表损坏,Mysql 可以尽量弥补,但是数据表的数量有5位数,修复不是很轻松了,而Innodb采用预写日志方式来实现事物,也就是只有当事务日志写入磁盘后财更新数据和索引,这样即便数据库崩溃,也可以通过事务日志恢复数据和索引。
索引的代价
1.索引会占据很大的磁盘空间,有的时候可能会比数据本身更大。
2.数据的更新,每次的关键字段更新都要引发索引的本身的更新,对于update、delete都会引发索引的更新,一旦涉及索引字段的变更就会索引的计算,导致更多的时间开销。
时间开销的计算时间和查询前的等待时间。
减少表锁定等待
MyISAM 的表锁定可以允许多个线程同时读取数据,select查询不需要锁等待,所有的select 都要等update结束才能开始。
Inoodb采用行锁定 对不update和select来自不同的线程,并且针对不同的记录行,所以他们可以轻松的并发执行,这就是行锁定的优点。
行锁定的价值在并不在于它本身的绝对速度,而是存在于特定的应用场景中。
行锁定缺点
select 查询语句,where条件中的count字段并没有索引,所以这里只能进行全盘扫描,对于Inoodb的行锁定,扫描需要额外的开销。
事务表的性能
Inoodb支持事务,Inoodb通过预写日志的方式实现事务,当有事务提交时Inoodb首先将它写到内存中的事务日志缓冲区,随后当事务日志写入磁盘时,Inoodb才更新实际数据和索引。关键点是事务日志何时写入磁盘。
开启查询缓存
mysql采用的机制是,当一个数据表有更新操作(update、insert)后,那么涉及这个表的所有查询缓存都会失效。
由此可以得出结论“更新少的表可以进行缓存”
反范式化
对于需要进行反范式化的操作,可以避免昂贵的join查询
对于数量的统计可是使用memcacheDB优化
memcacheDB是memcache于Berkeley的结合。
- Android性能优化-数据优化
- Oracle数据性能优化
- 数据性能优化
- Django性能数据优化
- 推荐:数据访问优化性能
- 海量数据性能优化措施
- 海量数据性能优化措施
- Lucene 性能优化带数据
- 数据格式化与性能优化
- 数据读写的性能优化
- Android-Sql-数据性能优化
- JavaScript性能优化-数据存取
- Spark性能优化------数据倾斜
- Django 数据层性能优化
- Android性能优化之一 数据存储优化
- 前端性能优化:JSON数据的优化
- mysql_性能优化_3_优化数据对象
- ASP.NET中数据存取性能优化
- 旅行员售货的什么近似算法;随便写了写,用了图的最小生成树Prim算法与深搜;
- 网站管理系统技巧
- 从零开始做3D地图编辑器(基于QT与OGRE)
- 幻灯片代码
- 2010年5月19日(布尔逻辑)
- 数据性能优化
- 生成Exe(DLL)文件
- 零基础学Qt4编程之Red Hat 9.0上安装Qt4的方法
- 自己动手写Redmine https服务端
- 各大网站管理系统的区别
- GP和MP随记
- 我对《软件架构设计》的一次实践
- 番茄花园版XP SP3光盘不能安装UG NX4,有谁知道啥原因么?
- java 数据库操作(以javaDB为例)