MySQL之系统性能优化

本文探讨了MySQL性能优化的三大关键领域:分页查询的子查询优化、索引策略的复合应用以及读写分离的实现技术。通过实例讲解如何避免无谓的数据扫描,创建复合索引来加速查询,并利用Spring AOP动态切换数据源,提高系统响应速度。
摘要由CSDN通过智能技术生成

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 读写分离原理图

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值