前言

当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