MySQL_慢SQL调优总结
MySQL 慢SQL调优总结
定位
- MySQL 慢查询日志,可以使用官方的mysqldumpslow分析
- SQL分析:一般是没命中索引或索引优化级别比较低,可以使用explain来分析
索引优化
- 如果业务上有唯一特性,则最好建成唯一索引
- 如果要join,则要join的字段类型一致、且有索引
- varchar字段建索引需要指定索引长度,没必要对整个字段加索引
- 如果要排序,排序的字段最好是索引的最后一部分,比如where a = ? and b = ? order by c; 索引a, b, c
- 最好利用覆盖索引来查询,避免回表操作
- 避免offset的深分页,应该先过滤id段再分页查一页。因为MySQL并不是跳过offset行,而是取offset+N行再放弃前offset行
- SQL性能优化的目标:至少range级别,要求ref级别,最好const。const:单表只有最多一行匹配(主键或唯一索引,在优化阶段即可返回);ref:使用普通索引;range:对索引进行范围检索。
分库分表
- 数据量超过500W考虑分库分表
数据归档
- 将“旧数据”归档,归档的数据不会再被业务访问到
业务优化
架构改造