前言
当Mysql单表记录变得越来越大,达到百万,千万的时候,没有优化的话,增删查改的性能急剧下降。
优化方案思路
数据库优化
1.数据库设计的时候要考虑性能
- 要考虑大体的数据量,提前分区,建立索引
- 表要避免null值出现,使用NOT NULL
- 尽量使用timestamp代替datetime
- 字段不要太多,尽量20以内
2.索引原则
- 使用区分度高的列作为索引
- 使用长度小的,类型简单的,not null的列
- 尽量扩展索引,不要新建索引
- 对where, on, group by, order by中出现的列使用索引
- 使用组合索引,和对长字段用组合索引 alter table user add index name_age_city (name(10), age, city)
3.慢查询优化
- 开启慢查询日志,用explain分析
- 单条sql复杂的,可以拆分
- 使用limit对结果记录进行限定
- 避免select *
- 使用联结查询代替子查询
- 拆分大的delete和insert
- or改写in,in的个数控制在200以内
- 避免where !=,会放弃索引而全表扫描
4.分区,分表,分库
- 分区
- 分库,读写分离
5.对于经常查询的数据,上缓存
6.对于日志分析,可以定期生成报表,同时清理数据
升级数据库
1.nosql,mongodb等 2.mysql替代,tiDB等
大数据解决方案
1.开源大数据方案,如hadoop家族,hbase/hive 2.云解决方案,只要调sdk,减少运维
参考
https://tech.meituan.com/2014/06/30/mysql-index.html
https://www.majiaxueyuan.com/front/articleinfo/16.html
https://github.com/judasn/Linux-Tutorial/blob/master/markdown-file/Mysql-Optimize.md