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考虑分库分表
  • 数据归档

    • 将“旧数据”归档,归档的数据不会再被业务访问到
  • 业务优化

  • 架构改造