现在mysql中有数据33.8w的数据,然后做查询和更新或插入操作,速度很慢,基本100条数据就要1.68s。好慢啊,我要测试一下,到底慢在哪?能不能提高点速度?

参考一篇博文:http://blog.csdn.net/clh604/article/details/19608869#0-tsina-1-37035-397232819ff9a47a7b7e80a40613cfe1。现在是2015.06.15 09:59。我要开始了。

1、首先我要在数据库中插入50w的数据。

刚开始速度还是很快的,当数据库中有2w多数据时,插入速度明显变慢,插入1000条,大约需要十几二十秒。现在数据库中大约有4w数据,插入1000条,大约需要二三十秒。这个速度正常吗?程序是同事的,用了SSH框架,不用手动建表,有影响吗?不是吧,如果速度维持在30s、1000条,还需要3个小时,才能把数据插完。现在数据库中有14.7w,插入1000条大概2分半。

插入前还要根据标题检查是否有重复的,如果有重复的就从数据库中查询出来,然后合并,更新,如果没有就插入。

不是吧,我将插入数据库的程序改为了最简单的jdbc,参考博文:http://www.askmaclean.com/archives/java-jdbc-batch-update-optimization.html。用PreparedStatement+addBatch+executeBatch,9s中插入了13.5w条。难道用框架,效率会受这么大的影响??不到10分钟已经导入了50w数据了。

将用SSH的程序去掉查询,只有插入,速度大概为1000条三四秒钟。现在已经6w了,速度没有降低。已经10.3w了,速度没有变慢。看来第一次测试时,速度变慢是因为查询。

2、下面测试查询的速度。(数据库中有54.6w数据)

比较根据id查询和根据没有建索引的普通字段查询速度的差别。

比较批量查询和单独查询的差别。

根据id查询1000次,花费时间:14s。好长啊。先保存下,要下班了。现在是2015年6月16日 09:51,继续。

看来昨天的14s还算正常的。今天根据title查,title是没有建索引的,查了10条,用了大概60秒。相差3750倍!!好吧,我知道我的程序慢在哪了。

上面使用普通的jdbc查询的,下面用SSH框架的程序测一测,用的数据库中有348000数据。

根据id查询1000次,竟然消耗时间:70538ms。查询比纯jdbc慢5倍,插入慢3-4倍。根据title就不测了,还是测测吧,查需10条,消耗时间:121825ms。

下面我要测测批量查询是不是会好点。

我都惊了!根据id批量查询1000次,就是用in集合,消耗时间:2996ms。好快啊,参考:http://stackoverflow.com/questions/9853197/jdbc-batch-query-for-high-performance。

根据title查询10次,消耗时间:5745ms,查询50次,消耗时间:6485ms,100次,消耗时间:6624ms,1000次,消耗时间:6155ms。怎么没差别啊,是不是哪错了?几次查询之间会有影响吗?我不明白。

用SSH框架的程序测,数据库中34.8w,根据id一次查询1000条,消耗时间:17083ms。根据title查询10条,消耗时间:13182ms;50条,消耗时间:12655ms;100条,消耗时间:13682ms;500条,消耗时间:17317ms;1000条,消耗时间:21314ms。差别也不大。

到这就测的差不多了,下面总结下,要不估计只有现在的我能看懂了。

插入操作

纯jdbc

1000条/1秒;50w数据大约10分钟,速度稳定。

SSH框架

1000条/3~4秒;50w数据大约30分钟,速度稳定。

多次单条查询

根据id查询

根据title查询(无索引)

纯jdbc(数据库中有54.6w数据)

1000次/14秒

10次/60秒

SSH框架(数据库中34.8w)

1000次/70秒

10次/12秒

in语句批量查询

根据id查询

根据title查询(无索引)

纯jdbc(数据库中有54.6w数据)

1000条/3秒

1000-10条/6秒

SSH框架(数据库中34.8w)

1000条/17秒

10条/13秒;500条/17秒;1000条/21秒

结论:纯jdbc比用框架快3~5倍;插入速度不会因为数据量增多而变慢;查询时尽量一批批的查,不要一条条的查。

现在要去改我的程序了,现在插入100条,大约2分钟。

今天不想测了,先到这吧。

修改了程序,没有大动,只将原来一条一条的查询,改为了一批一批的查询,速度明显快了,而且不会随着数据量变化而变化,现在速度是1000条3秒,不错不错。

mysql插入性能_mysql 数据量大时插入和查询性能相关推荐

  1. 我艹,MySQL数据量大时,delete操作无法命中索引。

    来自:Java面试那些事儿 最近,在脉脉上看到一个楼主提出的问题:MySQL数据量大时,delete操作无法命中索引:并且还附上了相关案例截图. 最终,楼主通过开启MySQL分析优化器追踪,定位到是优 ...

  2. 小程序setData数据量大时,导致卡顿怎么解决

    比如一个商品列表页,用户不断上滑加载数据,而每次加载数据时通常都是将获取的新数据和旧数据通过concat进行合并在一个数组内, this.setData({list: this.data.list.c ...

  3. mysql给数据量大的表添加索引的办法

    有一个问题,一张表有3百万条记录,随着时间的增加,记录量会更多,此时查询速度很慢.在创建此表前没有未相应字段添加索引,所以此时需要为表添加索引.但是因为数据量大的原因,索引添加不成功,想了很多办法,终 ...

  4. 解决Mysql数据量大的时候 分页优化(使用limit)的问题

    解决Mysql数据量大的时候 分页优化(使用limit)的问题 参考文章: (1)解决Mysql数据量大的时候 分页优化(使用limit)的问题 (2)https://www.cnblogs.com/ ...

  5. mysql null处理_MySQL中处理Null时要注意两大陷阱

    MySQL数据库是一个基于结构化数据的开源数据库.SQL语句是MySQL数据库中核心语言.不过在MySQL数据库中执行SQL语句,需要小心两个陷阱. 陷阱一:空值不一定为空 空值是一个比较特殊的字段. ...

  6. 历史数据如何处理_数据库表数据量大读写缓慢如何优化(1)【冷热分离】

    今天讨论的内容是冷热分离,也许概念并不陌生,对其使用场景也比较熟悉,但涉及锁的内容时仍然需要认真思考,这部分内容在我们实际开发中的"坑"还是不少的. 业务场景一 曾经经历过供应链相 ...

  7. 面试官问单表数据量大一定要分库分表吗?我们用六个字和十张图回答

    1 文章概述 在业务发展初期单表完全可以满足业务需求,在阿里巴巴开发手册也建议:单表行数超过500万行或者单表容量超过2GB才推荐进行分库分表,如果预计三年后数据量根本达不到这个级别,请不要在创建表时 ...

  8. mysql单表最大数据量_你的Mysql库真需要Adaptive Hash Index

    说起AHI(Adaptive Hash Index),有的同学估计很陌生,都没听说,没关系,下面我会详细解释说明的,AHI是什么,mysql库为什么要设计AHI,解决什么问题,只有了解这些原理之后,才 ...

  9. Java List数据量大, 需要分片批次操作

    很久前,写过关于list数据量大,分批处理的相关介绍文章(自定义的java代码实现): SSM Mybatis 批量插入 采用分批处理一次500条_默默不代表沉默-CSDN博客_mybatis分批插入 ...

最新文章

  1. linux系统与内核,[科普] Linux 的内核与 Linux 系统之间的关系
  2. GridView 导出为Excel
  3. 《组织行为学》_09 彩虹理论:人力资本越来越高怎么办?
  4. Java中Json和List转换
  5. 关闭sublime更新提示完整方案(转)并且统一TAB为四个空格、禁止升级检查
  6. [Cogs14] [网络流24题#1] 飞行员分配方案 [网络流,最大流,二分图匹配]
  7. rails3异步发邮件
  8. html %3ca id=%3e,xss编码小结
  9. java server.xml_tomcat配置文件server.xml详解
  10. 使用Xcode Instruments Leak解决内存泄漏问题
  11. BeanUtils组件使用小指南
  12. 总结了一些很实用值得收藏的站点
  13. python图片标记_python提取那些被“标记”照片的实例详解
  14. 关联规则增量更新算法——FUP算法
  15. 如何在Mac上清理垃圾文件?
  16. 006 以太坊Mist安装部署
  17. Android高效率编码-第三方SDK详解系列(一)——百度地图,绘制,覆盖物,导航,定位,细腻分解!...
  18. mysql数据库合库数据库合并心得
  19. 第17届开源中国开源世界高峰论坛文集出版
  20. 什么是智能插座,智能插座有什么用?

热门文章

  1. HTML超出部分滚动效果 HTML滚动 HTML下拉 附效果图
  2. nio selector
  3. json的简单的数据格式
  4. 分布式文件系统(FastDFS)安装 配置
  5. Facebook将React的许可改为MIT
  6. [ExtJS5学习笔记]第五节 使用fontawesome给你的extjs5应用添加字体图标
  7. 图像处理工具包ImagXpress的多页TIFF编辑API的使用(1)
  8. 基于Ubuntu交叉编译FFmpeg Windows SDK
  9. 数据库开发基本操作-安装Sql Server 2005出现“性能监视器计数器要求”错误解决方法...
  10. Struts2基础(1)_MVC