mysql中遇到的问题,以及一些优化对策
来源:互联网 发布:php location 不跳转 编辑:程序博客网 时间:2024/05/18 04:00
在公司做程序,用的是阿里云的RDS数据库,里面存储的数据不是很多,所以就没有太在意里面的内容。然而到了压测的时候出现了问题,里面的数据查询异常的缓慢,这个为什么呢,如果也让整个程序运行的时候查询数据库的时间可以短一点,分多线程的时候如何才能让整个数据库的瓶颈提高一下呢?
一、索引的引入
发现这个问题还真是一个偶然,在功能上可以实现的程序,我们可以做优化的地方第一个要想到的就是索引,这个很是重要。
我们都知道,数据库的索引,一般都是数据库的主键为首,一个数据库表在建立的时候,数据库自动为主键ID建立了一个唯一索引来标记主键,这样就可以在插入重复数据的时候有一个对应了,但是其他的字段都是没有索引的。我们的环境是2万条数据,联3表进行查询,然后查询到匹配的数据。由于之前的数据量都是很少的,所以没有注意到这个问题,现在是2万条数据,很是明显,联表查询的过程持续了3分钟多才好。但是给查询条件里面的字段都添加上索引之后呢?这个时间变为了0.04秒,这个效率是显而易见的,让我们节省了几倍的时间。
二、事务锁
我们在写数据库操作的时候,如果是碰到了多步的操作,必定会想要一个事务来管理这个操作的原子性,我这里的获取坑位号的功能也是这样的,但是在方法上加上了@Transaction标记之后,运行出现了奇怪的错误,说事务执行时间过长,导致事务执行失败,查了一下才知道是因为过于频繁的操作导致了数据库的事务锁,这个锁有两种方法可以解决,一是我们可以把里面查询和更新方法进行逻辑优化,达到不争用锁的目的,二就是我们可以在数据库配置的时候把这个等待时间适当的增大,就可以办到,具体是阿里云的RDS已经做好了,而且配置的很好,所以在RDS上面程序是本身没有问题的。
三、存储过程和函数的使用
在程序中有一些固定逻辑的运算,可以适当的吧他们放到存储过程中去使用,这样可以很好的使我们在执行的时候加快执行的速度,因为存储过程是不用二次编译的。并且我们在java程序中加锁的时候,只需要在调用sql的时候加锁就可以了,这样也可以保证唯一性。
但是要牢记的是,存储过程实现比较复杂,并且在表和逻辑都不变更的情况下使用,这就要求很高的固定性。对于经常修改的数据库不是很合适,并且需要实际程序在访问的时候的权限问题,看能不能调用到存储过程。
- mysql中遇到的问题,以及一些优化对策
- 遇到问题的对策
- Tomact+mysql+navicat...以及一些遇到的小bug和优化的问题集
- 兼职团队开发时遇到的一些问题及对策
- Mysql学习中遇到的一些问题
- 在WampServer Version 2.1(或更高版本)中切换不同版本的MySQL易遇到的问题及对策
- 11.29编程中遇到的一些问题以及解决办法
- ssh开发过程中遇到的问题,以及一些解决办法
- iOS开发中遇到的一些问题以及解决办法总结
- elasticsearch中遇到的一些问题以及解决方式
- hive安装过程中遇到的一些问题以及解决方案
- Android Studio 使用中遇到的一些问题以及解决方法
- 遇到的Mysql优化问题
- mysql遇到的一些问题
- Mysql优化中遇到的问题和感受
- mysql中经常会遇到的一些问题
- mysql约束中遇到的一些奇葩版本问题
- Java连接mysql中遇到的一些问题及解决方法
- 【前端知识点】深入浅出带你了解HTTP2.0
- Spark源码-SparkContext源码解析
- 翻译:浏览器内部的工作原理
- 大牛给的ACM进阶建议
- Activity工作流学习要点
- mysql中遇到的问题,以及一些优化对策
- Jquery append方法使用中遇到问题记录
- Android照片墙加强版,使用ViewPager实现画廊效果
- 18. php system(),exec() ,passthru() 函数
- docker——kafka集群安装
- MySQL二进制日志复制方法和高可用架构设计的理解
- 数字价格转中文汉字大写工具类
- 新手上路之c指针理解 笔记
- HashMap的工作原理