java mysql 批量插入效率_【java】[sql]使用Java程序向MySql数据库插入一千万条记录,各种方式的比较,最后发现insert批量插入方式对效率提升最明显...

我的数据库环境是mysql Ver 14.14 Distrib 5.6.45, for Linux (x86_64) using EditLine wrapper

这个数据库是安装在T440p的虚拟机上的,操作系统为CentOs6.5.

我的数据表是这样的:

CREATE TABLE `emp` (

`Id` ) NOT NULL AUTO_INCREMENT,

`name` ) DEFAULT NULL,

`age` ) DEFAULT NULL,

`cdate` timestamp NULL DEFAULT NULL COMMENT 'createtime',

PRIMARY KEY (`Id`)

) ENGINE DEFAULT CHARSET=utf8;

insert批量插入就是以下面这种方式写SQL语句

insert into emp(name,age,cdate)

values

('A' , 20, '2019-10-13 00:00:00'),

('B' , 21, '2019-10-13 01:00:00'),

('C' , 22, '2019-10-13 05:00:00')

对比表格如下

序号

测试链接

用时

采用类库

sql写法

提交方式

stmt/pstmt

1

4m55s

Spring JDBC Template

insert into emp(name,age,cdate)values('','',''),('','',''),('','',''),('','',''),('','','')

stmt.execute(sql)

stmt

2

5m

MyBatis

MyBatis batch Insert,具体实现估计就是上面的方式

估计为stmt.execute(sql),因为sql长度可调整

stmt

3

4m49s

Spring JDBC Template

insert into emp(name,age,cdate)values('','',''),('','',''),('','',''),('','',''),('','','')

stmt.executeBatch();

stmt

4

32m47s

Spring JDBC Template

insert into emp(name,age,cdate)values('','','')

pstmt.executeBatch()

prepared stmt

5

40m24s

Spring JDBC Template

insert into emp(name,age,cdate)values('','','')

stmt.executeBatch();

stmt

6

1h16m30s

MyBatis

insert into emp(name,age,cdate)values('','','')

估计为pstmt.execute(sql)

prepared stmt

其它测试都在2019.10.12,2019.10.13的随笔中,请各位按日期查看。

最后可以得出结论如下:

提升插入记录效率最明显的,是采用一次插入多条这种方式,如#1,#2,#3所做的,它相对于单条插这种方式有数量级的提升,用时基本控制在五分钟左右。

至于其它如用executeBatch替换execute,用prepareStatement替换statement等,基本提升很小,几乎可以忽略不计。

理由可以这样想,DB的实际处理能力是很强大的,一次插多条和一次插一条IO开销差不多,但前者明显充分调动了DB的处理能力,后者只动员了很少部分,相对于IO开销来说挺不值得,一累计差别就明显了。

欢迎各位网友自行测试并评判。

--END--2019年10月13日15:40:15

JDBC Java 程序从 MySQL 数据库中读取数据,并备份到 xml 文档中

MySQL 版本:Server version: 5.7.17-log MySQL Community Server (GPL) 相关内容:JDBC Java 程序从 MySQL 数据库中读取数据,并 ...

Java程序向MySql数据库中插入的中文数据变成了问号

找到mysql的安装目录,修改my.ini文件 (1)如何找到my.ini文件 如果my.ini文件不在MySQL的安装目录下,可能放在隐藏目录,要先去找到ProgramData,(这里要先打开显示隐 ...

java文件来演示如何访问MySQL数据库

java文件来演示如何访问MySQL数据库. 注:在命令行或用一个SQL的前端软件创建Database. 先创建数据库: CREATE DATABASE SCUTCS; 接着,创建表: CREATE ...

java连接mysql数据库增删改查操作记录

1. 连接数据库.得到数据库连接变量 注意连接数据库的时候 (1)打开DB Browser 新建一个Database Driver,注意加入Driver JARs的时候加入的包,我的是mysql-co ...

java jdbc使用SSH隧道连接mysql数据库demo

java jdbc使用SSH隧道连接mysql数据库demo   本文链接:https://blog.csdn.net/earbao/article/details/50216999   packag ...

java.sql.Date java.sql.Time java.sql.Timestamp 之比较

java.sql.Date,java.sql.Time和java.sql.Timestamp 三个都是java.util.Date的子类(包装类). java.sql.Date是java.util.D ...

linux自动定时备份web程序和mysql数据库

前些天受朋友说linux定时备份不知道怎么搞,叫帮忙处理一下.由于这段时间正闲着,所以也就欣然答应.由于朋友对linux不懂也希望我将操作的过程记录下来,也就是越详细越好.所以写得比较$%^& ...

PHP如何通过SQL语句将数据写入MySQL数据库呢?

1,php和MySQL建立连接关系 2,打开 3,接受页面数据,PHP录入到指定的表中 1.2两步可直接使用一个数据库链接文件即可:conn.php <?phpmysql_connect (&qu ...

随机推荐

Linux 之加密类型,CA,Openssl,Openssh

TCP/IP:安全 A------->B 机密性:明文传输(ftp,http,smtp,telnet),被窃听 完整性:消息被篡改 身份验证:你访问的主机就是你真实要访问的那台,而不是钓鱼网站 ...

CNContact对通讯录的基本使用(增删改查)

/** * 注意:iOS9才有能使用 * 首先在工程里导入ContactsUI.framework和Contacts.framework两个框架 * * * 源代码的链接地址 * 链接: http:/ ...

Android开发编码规范(自用)

转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持!   Android开发编码规范 目的及指导原则 目的 统一规范 Eclipse编辑环境 ...

Linux oracle 11g r2 安装前检查及安装

Linux环境配置 [c-sharp] view plaincopy OS:Fedora 15 DB:Oracle 11gR2 将Oracle安装到home/oracle_11目录 配置过程:本文来自 ...

oracle存储过程异常捕获

在oracle中捕获异常,通过 //sql执行 exception when others then dbms_output.putline('exception'); 其中others表示捕获未命名 ...

【Tesseract】Tesseract 的训练流程

在泰迪杯A题中,我刚刚接触了Tesseact,其中训练字库中遇到了较多的问题.所以在此记录一下,也当做一个笔记,省得以后忘记. 为了方便 ,将tif命名格式设为[lang].[fontname].ex ...

新概念英语(1-11)Is this your shirt &quest;

Is this your shirt?Whose shirt is white? A:Whose shirt is that? Is this your shirt, Dave? Dave:No si ...

Go中string转&lbrack;&rsqb;byte的陷阱

Go中string转[]byte的陷阱html {overflow-x: initial !important;}#write, body { height: auto; }#write, #writ ...

安装haproxy和haproxy命令

HaProxy系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 1.安装haproxy CentOS自带了haproxy,但可能版本比较老. ...

android开发中WebView的使用&lpar;附完整程序&rpar;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaMySQL批量存储数据可以使用批处理(batch)的方式进行,这样可以大大提高插入数据的效率。下面是一个简单的示例代码: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class BatchInsertDemo { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/test"; String username = "root"; String password = "123456"; try { Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection(url, username, password); conn.setAutoCommit(false);//关闭自动提交事务 PreparedStatement pstmt = conn.prepareStatement("insert into user(name, age) values (?, ?)"); for (int i = 1; i <= 10000; i++) { pstmt.setString(1, "user" + i); pstmt.setInt(2, i % 100); pstmt.addBatch();//添加到批处理中 } pstmt.executeBatch();//批量执行 conn.commit();//提交事务 pstmt.close(); conn.close(); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } } } ``` 在上面的示例中,我们创建了一个名为`BatchInsertDemo`的类,其中定义了一个`main()`方法。在`main()`方法中,我们首先定义了连接MySQL的URL、用户名和密码,然后使用`Class.forName()`方法加载了MySQL的驱动程序。接下来,我们通过`DriverManager.getConnection()`方法获得了与MySQL数据库的连接,并将自动提交事务关闭。 然后,我们使用`PreparedStatement`对象执行了一条插入语句,并使用`addBatch()`方法将其添加到批处理中。在循环结束后,我们使用`executeBatch()`方法批量执行所有的插入语句,并将事务提交。最后,我们关闭了`PreparedStatement`对象和数据库连接。 需要注意的是,批量插入数据时,每次插入的数据量不宜过大,否则可能会导致内存溢出或性能下降。一般来说,每批次插入的数据量在几千到一万条之间比较合适。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值