mysql优化思考

mysql考虑

  1. 数据的容量:1-3年内会大概多少条数据,每条数据大概多少字节;
  2. 数据项:是否有大字段,那些字段的值是否经常被更新;
  3. 数据查询SQL条件:哪些数据项的列名称经常出现在WHERE、GROUP BY、ORDER BY子句中等;
  4. 数据更新类SQL条件:有多少列经常出现UPDATE或DELETE 的WHERE子句中;
  5. SQL量的统计比,如:SELECT:UPDATE+DELETE:INSERT=多少?
  6. 预计大表及相关联的SQL,每天总的执行量在何数量级?
  7. 表中的数据:更新为主的业务 还是 查询为主的业务
  8. 打算采用什么数据库物理服务器,以及数据库服务器架构?
  9. 并发如何?
  10. 存储引擎选择InnoDB还是MyISAM?

优化方向

  1. 优化sql 索引
  2. 缓存(memcached,redis)
  3. 读写分离 主从复制
  4. 分区(分区条件列)
  5. 垂直拆分(按列分割,子表行数一样)(example:冷热列)
  6. 水平拆分 (按记录分割,列数相同)(example:表很大 表冷热不均 存放到多个介质) 数据水平切分的主键全局唯一方案

慢查询优化基本步骤

  1. 先运行看看是否真的很慢,注意设置SQL_NO_CACHE
  2. where条件单表查,锁定最小返回记录表。这句话的意思是把查询语句的where都应用到表中返回的记录数最小的表开始查起,单表每个字段分别查询,看哪个字段的区分度最高
  3. explain查看执行计划,是否与1预期一致(从锁定记录较少的表开始查询)
  4. order by limit 形式的sql语句让排序的表优先查
  5. 了解业务方使用场景
  6. 加索引时参照建索引的几大原则
  7. 观察结果,不符合预期继续从0分析

调整sql语句性能的几个要点

MySQL数据库性能优化之缓存参数优化 MySQL数据库性能优化之表结构 MySQL数据库性能优化之索引优化 MySQL数据库性能优化之SQL优化 MySQL数据库性能优化之存储引擎选择 MySQL数据库性能优化之硬件优化

MySQL性能优化的最佳20+条经验