【DB】性能优化
为什么数据库会慢
对于关系型数据库,数据是存储在磁盘上,速度必然会受到IO操作的限制。就算有索引,由于其底层数据存储结构是B+树,效率会受到树高的影响(树的高度和数据量成正比)。
总体优化方案
- 减少数据量:序列化存储、数据归档、分库分表
- 以空间换时间:使用缓存、集群化(一主多从)、冗余存储(中间表)
- 选择适合的存储系统:考虑使用NoSQL,比如 MongoDB、Redis
- 读写分离
- 索引优化:使用索引、避免索引失效、避免回表
- 加资源:CPU、内存、磁盘、集群化
- 优化查询语句
数据归档
利用数据库作业,定时把历史数据移走。如果需要查历史数据,可新增业务入口路由到对应的历史表。
注意点:像 MySQL 由于删除数据后是不会释放空间的,可以执行命令 OPTIMIZE TABLE 释放存储空间,但是会锁表,如果存储空间还满足,可以不执行。
中间表
利用数据库作业或任务调度程序把复杂的查询结构汇总到一张额外的物理表中。比如日报、月报、年报等。
索引优化
- 确保每个表都要有主键(聚集索引)
- 使用索引:where条件经常使用的、用于表连接的、用于排序的
- 适当的使用覆盖索引,避免回表
- 避免索引失效场景
- 定时整理索引碎片(重建索引)
其它
-
返回更少的数据:只查询必要的数据、分页处理
-
减少磁盘访问
-
减少网络访问、减少交互次数
-
数据库连接复用(池化)
-
避免死锁
浙公网安备 33010602011771号