mysql学习笔记-数据库其他调优策略
1、如何定位调优问题
用户的反馈(主要)
日志分析(主要)
服务器资源使用监控
数据库内部状况监控
2、调优的维度和步骤
第1步:选择适合的 DBMS
第2步:优化表设计
第3步:优化逻辑查询
第4步:优化物理查询(在这个部分中,我们需
要掌握的重点是对索引的创建和使用。)
第5步:使用 Redis 或 Memcached 作为缓存
第6步:库级优化
6.1 读写分离
6.2 数据分片
3、优化数据库结构
3.1拆分表:冷热数据分离
3.2 增加中间表
3.3 增加冗余字段
3.4 优化数据类型
3.5 优化插入记录的速度
3.6 使用非空约束
3.7 分析表、检查表与优化表
4、大表优化
4.1 限定查询的范围(禁止不带任何限制数据范围条件的查询语句)
4.2 读/写分离
4.3 垂直拆分
分库:如果数据库中的数据表过多,可以采用 垂直分库 的方式,将关联(业务类型相同)的数据表部署在同一个数据库上。
如果数据表中的列过多,可以采用 垂直分表 的方式,将一张数据表分拆成多张数据表,把经常一起使用的列放到同一张表里。
垂直拆分的优点: 可以使得列数据变小,在查询时减少读取的Block数,减少!/0次数。此外,直分区可以简化表的结构,易于维护。
垂直拆分的缺点: 主键会出现冗余,需要管理冗余列,并会引起 JOIN 操作。此外,垂直拆分会让事务变得更加复杂。
4.4 水平拆分
①尽量控制单表数据量的大小,建议控制在1000万以内。
②将大的数据表按照 某个属性维度 分拆成不同的小表,每张小表保持相同的表结构。比如你可以按照年份来划分,把不同年份的数据放到不同的数据表中。2017年、2018年和 2019 年的数据就可以分别放到三张数据表中。
③水平分表仅是解决了单一表数据过大的问题,但由于表的数据还是在同一台机器上,其实对于提升MySQL并发能力没有什么意义,所以 水平拆分最好分库,从而达到分布式的目的。