数据库优化,sql与索引效果最明显,也是最简单的方法
而想要优化sql和索引,首先就需要知道sql的性能如何,是否有效命中索引,索引匹配行数,查询消耗时间
分析这些性能指标,借助sql分析工具是最常用的方法,使用SQLServer中的执行计划
,能够看到sql每一个操作的消耗,预读行数
有时候,我们不确定哪些sql最终会造成性能影响,就可以借助SQLServer Profiler
工具,通过一段时间的监听,即可收集到所有耗时的sql
sql优化的根本思路就是利用索引尽可能匹配最少的数据,获取数据时,尽可能只获取索引中包含的字段,这样就不会再去获取对应行的数据
而索引的优化,则是选对首要字段,并包含常用的字段数据
再下一步,就是数据库结构的优化
表结构上,对于要联合多个表查询的数据,可以通过冗余字段
来减少行筛选
目前很多互联网公司都不使用外键,原因是外键其实就是一条索引,删除和更新外键会造成额外的性能开销
对于数据量大的表格,添加时将锁住整个表,读取时由于索引非常庞大,查询起来效率也不高
这种情况可以进行横向切割
,将一个表拆分成多个表,切割可以是按数据量
,也可以是时间
当然,也可以使用动态表分区,表分区并不支持动态表分区,需要程序去实现
除了横向切割之外,表还可以垂直切割
,表现出来就是将字段存放到多个表中
比如一个文章表,点击量,推荐量,这些数据频繁更新,更新的时候会锁住整个行,这个时候将他们分到另外一个表中,就不影响文章表的性能了
在这一步基础上,还有硬件上去做优化
数据库的性能瓶颈很大一部分是磁盘io速度慢造成的,当修改数据,插入数据,遍历行,这些操作会频繁操作io
虽然数据库在结构上优化了对机械硬盘的读写速度,但是还是远远慢于内存中读写
将机械硬盘换成读写速度更快的SSD
,将会大大提升数据库的性能
SSD
的连续读写能力非常快,以我手上这块为例,连续读取速度达到了2G/S
,是机械硬盘的20多倍
硬件上也没办法优化了,那只有堆机器了
分布式数据库是非常复杂的,目前我的研究也不多,就不提了