MySQL 优化思路
想要优化一个 MySQL 的查询问题可以从以下几个层面着手
- MySQL 查询层,与 SQL、索引强相关
- 建表语句,贴合业务做估算,能小不大,能定不变
- 配置信息,例如最大连接数、buffer pool 参数
- 分流思路:MQ 做削峰、Redis 做缓存
# 索引优化
索引是一个通过快速定位指定头节点的数据结构(树)解决索引问题首先从解决回表次数入手
- 回表次数优化
- 覆盖索引:创建索引去避免回表
- 索引下推:创建组合索引去减少回表的范围/次数
- 建表时要合理设计表,根据业务以及单行数据的量去推测一行数据如何设计比较合理,能小尽量小,这能够提高回表的效率(一次 IO只能捞一页数据到 buffer pool,减少单行数据的大小就等于一次 IO 能够捞到更多的数据到 buffer pool,提高了筛选效率)
- 索引优化
- 根据业务去设计索引字段
- 索引字段不宜过多(最好不超过 7 个)
# 配置优化
- 由于配置的最大连接数过小会导致一部分的线程长时间处于等待,造成长时间等待可用资源释放的问题
- buffer pool 默认参数很小,如果有专用的数据库服务器,可以将 buffer pool 大小设置为物理内存的 80%
# 分流思路
- 流量大尖刺问题,使用 MQ 缓解瞬时请求压力
- Redis 做缓存直接减小 MySQL 的访问压力
完善页面 (opens new window)