MySQL之系统性能优化
一 性能优化分页
1 问题描述
在分页时,越到后面页码越大,查询花费时间越多,比如limit 1000000,10,这样前1000000条记录不需要但是要查,比较耗时。
2 优化解决
通过子查询,使用主键索引只分页查询id值,在去除笛卡尔积即可。
select * from t_user limit 100000000,10;
优化后
select * from t_user u,
**(select id from t_user order by id limit 10000000,10)** t
where u.id=t.id;
二 性能索引优化
1 问题描述
条件查询的字段并没有建立索引,查询会比较耗时。
2 优化
针对查询的字段创建复合索引,查询时会遵循最左前缀原则,这会大大提高查询效率。为了考虑到索引失效的情况,我们可以对查询字段根据最左前缀原则多创建几个索引。
例如:username,age,date
我们可以创建(username,age,date),(age,date)和(date)三个索引。
三 性能优化读写分离
1 读写分离概述
MySQL主从复制可以使用读写分离来减少单台MySQL服务器的压力,从而提高访问效率,对于读写分离的实现可以通过Spring AOP来进行动态的切换数据源进行操作,读写分离架构如图所示:
2 读写分离实现
(1)动态配置数据源
① 在db.properties配置读写数据源连接池
② 在application-dataSource.xml中配置
③ 创建一个类继承AbsrractRoutingDataSource,创建DataSourceHandler类获取数据源
④ 在application-dataSource.xml中配置,把原先的数据源给注释掉的
2 AOP动态切换读写数据库连接池
(1)写一个类DataSourceAspect获取连接池,加上注解@Component和@Aspect和@EnableAspectJAutoProxy和@Order(-9990)order值越小越早加载,为了兼容事务管理器的数据源,需要先加载。
3 读写分离原理图