当前位置: 首页 > 编程日记 > 正文

mysql插入性能_mysql 数据量大时插入和查询性能

现在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秒,不错不错。

相关文章:

Ext JS 4 笔记1

ExtJS4 引入了现在灰常流行的前端MVC。这在原本的3.3.1里面是没有的。原先项目里为了实现相对的MVC,自己写了一个controller和model ,收集并且保持JS端的数据。所以呢,这时候的文档结构就完全不一样了。原本的结构更像是传统 C# winform &…

activemq 消息阻塞优化和消息确认机制优化

一、消息阻塞优化 1.activemq消费者在从待消费队列中获取消息是会先进行预读取,默认是1000条(prefetch1000)。这样很容易造成消息积压。 2.可以通过设置prefetch的默认值来调整预读取条数,java代码如下 //设置预读取为1ActiveMQPr…

iOS-查询数据库--指定数据表中的当前数据行的总数量

很多时候,我们在查询一个表的时候,不想得到里面的记录内容,只是想简单的得到符合查询条件的记录条数。 FMDB中有一个很简单的方法就可以实现,见下面的代码实例: #import "FMdatabase.h" (int)numberOfCurre…

mysql 判断日期是否在某范围内_判断时间是否在某个区间内

private bool IsInTimeInterval(DateTime time, DateTime startTime, DateTime endTime) {//判断时间段开始时间是否小于时间段结束时间,如果不是就交换 if (startTime > endTime) {DateTime tempTime = startTime; startTime = endTime; endTime = tempTime; } //获取以公…

数据库索引-基本知识

为什么80%的码农都做不了架构师?>>> 数据库索引--基本知识 有许多因素会影响数据库性能。最明显的是数据量:您拥有的数据越多,数据库的速度就越慢。虽然有很多方法可以解决性能问题,但主要的解决方案是正确索引数据库…

Microsoft Enterprise Library 5.0 系列(八) Unity Dependency Injection and Interception

依赖注入容器Unity: Unity的构造类似于Castle中的IOC(控制反转 或者叫依赖注入)容器,我们使用抽象接口来隔离使用者和具体实现之间的依赖关系,但是不管再怎么抽象,最终还是要创建具体实现类的实例,这种创建具体实现类的…

pycharm 使用小结

1.pycharm 自动换行,显示行号,缩进向导 在代码右侧右键 2.自动注释/取消注释 ctrl /转载于:https://www.cnblogs.com/xuesu/p/4755086.html

golang socket读写同时_epoll在Golang的应用

使用Golang可以轻松地为每一个TCP连接创建一个协程去服务而不用担心性能问题,这是因为Go内部使用goroutine结合IO多路复用实现了一个“异步”的IO模型,这使得开发者不用过多的关注底层,而只需要按照需求编写上层业务逻辑。这种异步的IO是如何…

HTTP 2.0与OkHttp

HTTP 2.0是对1.x的扩展而非替代,之所以是“2.0”,是因为它改变了客户端与服务器之间交换数据的方式。HTTP 2.0增加了新的二进制分帧数据层,而这一层并不兼容之前的HTTP 1.x服务器及客户端——是谓2.0。  在正式介绍HTTP 2.0之前,…

根据“坐标”生成趋势图

数据库环境:SQL SERVER 2008R2 有一“坐标”表t,表结构如下: id int, num int 字段id是序号,递增且连续,字段num是数值类型。id可以看成是坐标轴的横轴,num则跟纵轴有关系&…

Winform程序怎么降低占用的内存?

1 Winform程序怎么降低占用的内存?winform程序占用的内存数一直居高不下,提供给用户的手册中说明内存不能大于50MB,但是每次运行的时候,内存都会飙高到100多MB. 2 3 后来终于发现了一个方法,可以解决这个问题: …

mysql关系表控制_mysql表关系

一、表的详细操作1.修改表名alter table 旧表名 rename 新表名;​2.修改表的引擎与字符编码alter table 表名 engine"引擎名" charset"编码名";​3.复制表 *#结构create table 新表名 like 旧表名;eg:1create table nt like tt;#将tt的表结构复制到新表nt中…

【Python3爬虫】常见反爬虫措施及解决办法(二)...

【Python3爬虫】常见反爬虫措施及解决办法(二) 这一篇博客,还是接着说那些常见的反爬虫措施以及我们的解决办法。同样的,如果对你有帮助的话,麻烦点一下推荐啦。 一、防盗链 这次我遇到的防盗链,除了前面说…

【原创】ListView快速滚动至新添加一行(自动滚动)

在C#开发中我们经常要开发一些日志系统,尤其是基于ListView的日志显示系统。但是当日志增多是你是否有一些困扰,就是它为什么不会自动滚动至最后一行。以下是一小段代码,希望可以帮助你. public void addLog(string logString) { lock (_lock…

MFC调用CFileDialog之后目录居然会改变,调试了好久终于发现是这个问题

MFC调用CFileDialog之后目录居然会改变,调试了好久终于发现是这个问题,上网搜了下,发现也有人和我出现相同的问题。他的博客如下: http://www.programlife.net/current-directory-changed-after-using-cfiledialog.html MFC调用C…

mysqlls_mysql基本命令

1、Mysql启动命令:命令行内容为:\>net start mysql运行情况如图1所示:图1(Mysql启动命令)2、连接Mysql服务器:命令行内容为:\>mysql -u root -h hostaddress -p password其中,root为Mysql的用户名&a…

2019年3月

分包加载 使用公众号登录微信提示  "公众号暂不支持此种登录方式" 使用已经注册过的手机号注册新的微信账号提示  "你申请注册的手机号已被其他微信号绑定,暂时不能使用该手机号注册" https://github.com/witcat/LayaWxCacheFromZip /******/ (functio…

8天学通MongoDB——第三天 细说高级操作

原文地址:http://www.cnblogs.com/huangxincheng/archive/2012/02/21/2361205.html 今天跟大家分享一下mongodb中比较好玩的知识,主要包括:聚合,游标。 一: 聚合 常见的聚合操作跟sql server一样,有:count&…

UVA 10954 Add All

UVA_10954 看了别人解题报告之后发现累加的过程可以这样操作,每次取最小的两个元素加和,然后把和当作一个新元素放进集合,直到剩下一个元素,然后把中间结果加起来就是要求的结果。实际上这个题目就是哈弗曼编码,在LRJ树…

Java将mysql输出csv,如何从Java中的Access数据库导出表并将其保存到.csv

I am trying to export a lot of large tables from a MS Access db with java using the jdbc:odbc bridge. I wanted to save these tables to a CSV file first was wondering what would the best way to do this would be? any help would be appreciated.解决方案Fetch …

windows下nodejs express安装及入门网站,视频资料,开源项目介绍

windows下nodejs express安装及入门网站,视频资料,开源项目介绍,pm2,supervisor,npm,Pomelo,Grunt安装使用注意事项等总结 第一步:下载安装文件下载地址:官网http://www.nodejs.org/download/ 第二步:安装nodejs下载完…

python 之 pip、pypdf2 安装与卸载

pip是个啥? pip 是一个现代的,通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能。 第一步:pip 下载:https://pypi.org/project/pip/#files 第二步:解压,进入目录python pip\pi…

eclipse 3.55安装j2ee开发工具

选择help--->install new software -->work width --选择下拉框选择要安装插件转载于:https://www.cnblogs.com/yjhrem/articles/2309602.html

mysql中没有内置函数_[mysql]MySQL中的内置函数

用在select 语句,以及子句where order by hacing 中 update delete函数中可以将字段名作为字段来用,变量的值就是这个列对应的每一行记录。一、字符串函数php中用到的函数,mysql中大部分也提供了1、CONCAT(”字符串”,字段&…

tiny210V2 Uboot kernel filesystem 烧写和启动

1.sd启动 将u-boot镜像写入SD卡 将SD卡通过读卡器接上电脑(或直接插入笔记本卡槽),通过"cat /proc/partitions"找出SD卡对应的设备,我的设备节点是/dev/sdb.执行下面的命令$sudo dd iflagdsync oflagdsync iftiny210-ub…

Linux下Shell日期的格式

2019独角兽企业重金招聘Python工程师标准>>> 不管是哪种语言,日期/时间都是一个非常重要的值。比如我们保存日志的时候,往往是某个前缀再加上当前时间,这样日志文件名称就可以做到唯一。在Shell环境里,我们获取时间的命…

usaco 6.1

6.1.2 rectbarn 首先要注意空间的消耗,3000*3000 大概10m的样子(最多16m),只够开个char,本想套用big barn的dp方法,定义struct [i,j]{int l;int h}来表示以(i,j)为右上顶点的矩形,貌似这样会爆,只好考虑其它解法(参考wc2003王知昆的论文). 大概思路: 定义h[i,j],l[i,j],r[i,j]分…

docker mysql详解_Docker轻松入门(详解)

一 Docker简介Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙…

[恢]hdu 2014

2011-12-12 05:46:08 地址:http://acm.hdu.edu.cn/showproblem.php?pid2014 题意:中文题。 mark:wa了3次!!!因为敲错变量!!!min敲成了num,各种二。可能是困了…

java在继承中父类的成员变量是否会被子类所覆盖

假如 父类 int num 7;子类 int num 9;父类是否会被子类所覆盖? 给你看两个例子: 第一个例子: 第二个例子: 这两个例子的区别只有一句话 由此证明了子类从父类继承的时候 如果有同名的成员变量 默认情况下 父类的成…