mysql考虑
- 数据的容量:1-3年内会大概多少条数据,每条数据大概多少字节;
- 数据项:是否有大字段,那些字段的值是否经常被更新;
- 数据查询SQL条件:哪些数据项的列名称经常出现在WHERE、GROUP BY、ORDER BY子句中等;
- 数据更新类SQL条件:有多少列经常出现UPDATE或DELETE 的WHERE子句中;
- SQL量的统计比,如:SELECT:UPDATE+DELETE:INSERT=多少?
- 预计大表及相关联的SQL,每天总的执行量在何数量级?
- 表中的数据:更新为主的业务 还是 查询为主的业务
- 打算采用什么数据库物理服务器,以及数据库服务器架构?
- 并发如何?
- 存储引擎选择InnoDB还是MyISAM?
优化方向
- 优化sql 索引
- 缓存(memcached,redis)
- 读写分离 主从复制
- 分区(分区条件列)
- 垂直拆分(按列分割,子表行数一样)(example:冷热列)
- 水平拆分 (按记录分割,列数相同)(example:表很大 表冷热不均 存放到多个介质) 数据水平切分的主键全局唯一方案
慢查询优化基本步骤
- 先运行看看是否真的很慢,注意设置SQL_NO_CACHE
- where条件单表查,锁定最小返回记录表。这句话的意思是把查询语句的where都应用到表中返回的记录数最小的表开始查起,单表每个字段分别查询,看哪个字段的区分度最高
- explain查看执行计划,是否与1预期一致(从锁定记录较少的表开始查询)
- order by limit 形式的sql语句让排序的表优先查
- 了解业务方使用场景
- 加索引时参照建索引的几大原则
- 观察结果,不符合预期继续从0分析
MySQL数据库性能优化之缓存参数优化 MySQL数据库性能优化之表结构 MySQL数据库性能优化之索引优化 MySQL数据库性能优化之SQL优化 MySQL数据库性能优化之存储引擎选择 MySQL数据库性能优化之硬件优化