硬件层面
1、选择IO性能好的服务器;
2、数据库服务器不要开启其他服务。
数据库层面
1、加大Mysql缓存大小;
2、加大max_connections数量,提高并发量
表结构涉及层面
1、InnoDB基于B+数的特点,大数据量表尽量用自增主键提高读写效率
2、合理创建索引,重复数据多的或者NULL值的不适合做索引
SQL层面
主要是基于索引的优化,比如
1、大批量插入数据,可以按照主键顺序排列,同时可以关闭唯一性校验,改为手动提交事务。
2、因为mysql的索引是遵循左前缀原则,比如索引a、b、c,只有在查询条件或者group by、order by的字段排序为a,ab,abc时索引才会生效,所以要尽量保证顺序一致。
3、查询包含group by但是用不需要排序的时候,可以加上order by null
4、用具体字段代替select *
5、关联查询代替子查询
6、or如果索引失效,可以用union代替
SQL的优化不限于此,具体的可以查看执行计划,即在sql前面加上explain,查看连接类型,是否走索引等。
架构设计层面
1、考虑到高可用性,可采用MySQL主从复制+Keepalived做双击热备,常见集群软件有Keepalived、Heartbeat。
2、读写分离
3、连接池
4、缓存机制减轻数据库压力,比如redis等
代码层面
1、合并SQL,比如insert into tb_test values(1,'Tom'),(2,'Cat'),(3,'Jerry');
2、多线程访问数据库。