mysql中遇到的问题,以及一些优化对策
2017-09-24 23:40
337 查看
在公司做程序,用的是阿里云的RDS数据库,里面存储的数据不是很多,所以就没有太在意里面的内容。然而到了压测的时候出现了问题,里面的数据查询异常的缓慢,这个为什么呢,如果也让整个程序运行的时候查询数据库的时间可以短一点,分多线程的时候如何才能让整个数据库的瓶颈提高一下呢?
我们都知道,数据库的索引,一般都是数据库的主键为首,一个数据库表在建立的时候,数据库自动为主键ID建立了一个唯一索引来标记主键,这样就可以在插入重复数据的时候有一个对应了,但是其他的字段都是没有索引的。我们的环境是2万条数据,联3表进行查询,然后查询到匹配的数据。由于之前的数据量都是很少的,所以没有注意到这个问题,现在是2万条数据,很是明显,联表查询的过程持续了3分钟多才好。但是给查询条件里面的字段都添加上索引之后呢?这个时间变为了0.04秒,这个效率是显而易见的,让我们节省了几倍的时间。
但是要牢记的是,存储过程实现比较复杂,并且在表和逻辑都不变更的情况下使用,这就要求很高的固定性。对于经常修改的数据库不是很合适,并且需要实际程序在访问的时候的权限问题,看能不能调用到存储过程。
一、索引的引入
发现这个问题还真是一个偶然,在功能上可以实现的程序,我们可以做优化的地方第一个要想到的就是索引,这个很是重要。我们都知道,数据库的索引,一般都是数据库的主键为首,一个数据库表在建立的时候,数据库自动为主键ID建立了一个唯一索引来标记主键,这样就可以在插入重复数据的时候有一个对应了,但是其他的字段都是没有索引的。我们的环境是2万条数据,联3表进行查询,然后查询到匹配的数据。由于之前的数据量都是很少的,所以没有注意到这个问题,现在是2万条数据,很是明显,联表查询的过程持续了3分钟多才好。但是给查询条件里面的字段都添加上索引之后呢?这个时间变为了0.04秒,这个效率是显而易见的,让我们节省了几倍的时间。
二、事务锁
我们在写数据库操作的时候,如果是碰到了多步的操作,必定会想要一个事务来管理这个操作的原子性,我这里的获取坑位号的功能也是这样的,但是在方法上加上了@Transaction标记之后,运行出现了奇怪的错误,说事务执行时间过长,导致事务执行失败,查了一下才知道是因为过于频繁的操作导致了数据库的事务锁,这个锁有两种方法可以解决,一是我们可以把里面查询和更新方法进行逻辑优化,达到不争用锁的目的,二就是我们可以在数据库配置的时候把这个等待时间适当的增大,就可以办到,具体是阿里云的RDS已经做好了,而且配置的很好,所以在RDS上面程序是本身没有问题的。三、存储过程和函数的使用
在程序中有一些固定逻辑的运算,可以适当的吧他们放到存储过程中去使用,这样可以很好的使我们在执行的时候加快执行的速度,因为存储过程是不用二次编译的。并且我们在java程序中加锁的时候,只需要在调用sql的时候加锁就可以了,这样也可以保证唯一性。但是要牢记的是,存储过程实现比较复杂,并且在表和逻辑都不变更的情况下使用,这就要求很高的固定性。对于经常修改的数据库不是很合适,并且需要实际程序在访问的时候的权限问题,看能不能调用到存储过程。
相关文章推荐
- 腾讯云服务器CentOS7.0安装JDK+Tomcat+MySQL详细步骤以及自己遇到的一些问题
- Windows7下MySQL5.5.20免安装版的配置 - (补上了我遇到的几个问题,以及mysql启动优化)
- wordpress迁移以及遇到的一些问题[mysql备份导入导出][固定链接404]
- 绿色mysql初始化以及遇到一些问题解决方法
- Ubuntu上安装MySql过程,以及遇到的一些问题
- wordpress迁移以及遇到的一些问题[mysql备份导入导出][固定链接404]
- 安装widows mysql 免安装版(zip) 步骤详解 以及遇到问题解决 以及忘记密码的修改方法
- 使用elasticsearch遇到的一些问题以及解决方法
- mysql5.7 zip安装遇到的一些问题
- CDH5.3.x安装准备工作以及遇到的一些问题
- MYSQL使用的时候遇到的一些问题
- 关于SBA(Sparse Bundle Adjustment)编译以及遇到的一些问题
- 以前遇到的一些小问题,grub,编译kernel喝mysql的字符设置
- 番外三:讲一些最近遇到的问题以及中断系统的说明
- 刚开始学习Android遇到的一些问题---主要安卓环境安装Androidstudio以及模拟器测试真机测试
- urlscheme白名单问题以及项目适配iOS9遇到的一些问题及解决办法
- mysql遇到的一些问题
- (转) mysql 的一些优化问题
- Android过渡动画之共享元素实现以及遇到的一些问题