数据库性能优化是个大话题,从大的方面讲,可以从硬件,软件上优化,此文讲的都是从软件上的优化。
主要有六个个方面:
- 表结构优化
- 数据类型优化
- 索引优化
- 查询优化
- 数据库配置优化
- 操作系统优化
一、表结构优化
我们设计表的时候,第一个会想到的规范就是范式,这里先回顾一下什么是范式:
第一范式 不存在表中有表,是指字段不可再分、
第二范式 不存在传递依赖
第三范式 不存在部分依赖
BC范式 所有字段都依赖于主键
但是单纯的考虑范式的话,在应用开发的时候又会特别的不方便,而且有的时候因为范式需要多个表关联,所以就有了【反范式】这个概念。
反范式是什么呢?就是指与范式相反或者有冲突的设计表的方式。在实际的应用中,我们一般都是用混用范式(范式+反范式),纯范式或者纯反范式都是存在于实验室里。
1.1 增加冗余字段
比如有一张员工表,部门表,部门里的部门经理是存放着员工代号,而经常查部门的时候,也要查部门经理的名字,那么就可以在员工表里增加部门经理的名字这个字段。
优点是避免了表关联,缺点是占用空间和增加维护成本(在换经理的时候,不仅要更新经理代号,还要更新名字)
1.2 增加汇总字段
比如有一张发帖表,你要统计有多少个回复,如果每次都去回复表里count一次,那么性能就会特别差,特别是查询帖子列表,同时要查询多少个回复时,性能就更差了。
而如果在表里增加个汇总字段,那么就会很明显的改善性能,避免关联表和count操作了
二、数据类型优化
数据类型优化就一个原则:越小的越好。
这里指的小是指数据类型所占的字节数。在mysql里面,对某个字段会分配固定的内存,所以越小的字段,占磁盘,内存都少,性能也就会比较好
三、索引优化
索引建立的主要依据是:对表的操作方式。
你会对表执行什么操作,group by,count ,order by,子查询,关联查询,联合查询?使用的什么字段?,我把执行的操作和利用到的字段通称为对表的操作方式。
索引的建立一定是在业务模型之上的。
索引优化需要比较长的篇幅来讲,将在下一章讲。
四、查询优化
查询优化也会另外开一篇