插入1000万条数据到mysql数据库表
转自:https://www.cnblogs.com/fanwencong/p/5765136.html
我用到的数据库为,mysql数据库5.7版本的
1.首先自己准备好数据库表
其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下:
com.mysql.jdbc.PacketTooBigException: Packet for query is too large (4232009 > 4194304). You can change this value on the server by setting the max_allowed_packet’ variable.
出现上面的错误是因为数据库表的 max_allowed_packet这个配置没配置足够大,因为默认的为4M的,后来我调为100M就没报错了
set global max_allowed_packet = 100*1024*1024*记住,设置好后重新登录数据库才能看的设置后的值
show VARIABLES like '%max_allowed_packet%'
Java的jdbc代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
package insert;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Date;
import com.mysql.jdbc.PreparedStatement;
public class InsertTest {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
final String url = "jdbc:mysql://127.0.0.1/teacher" ;
final String name = "com.mysql.jdbc.Driver" ;
final String user = "root" ;
final String password = "123456" ;
Connection conn = null ;
Class.forName(name); //指定连接类型
conn = DriverManager.getConnection(url, user, password); //获取连接
if (conn!= null ) {
System.out.println( "获取连接成功" );
insert(conn);
} else {
System.out.println( "获取连接失败" );
}
}
public static void insert(Connection conn) {
// 开始时间
Long begin = new Date().getTime();
// sql前缀
String prefix = "INSERT INTO t_teacher (id,t_name,t_password,sex,description,pic_url,school_name,regist_date,remark) VALUES " ;
try {
// 保存sql后缀
StringBuffer suffix = new StringBuffer();
// 设置事务为非自动提交
conn.setAutoCommit( false );
// 比起st,pst会更好些
PreparedStatement pst = (PreparedStatement) conn.prepareStatement( "" ); //准备执行语句
// 外层循环,总提交事务次数
for ( int i = 1 ; i <= 100 ; i++) {
suffix = new StringBuffer();
// 第j次提交步长
for ( int j = 1 ; j <= 100000 ; j++) {
// 构建SQL后缀
suffix.append( "('" + uutil.UUIDUtil.getUUID()+ "','" +i*j+ "','123456'" + ",'男'" + ",'教师'" + ",'www.bbk.com'" + ",'XX大学'" + ",'" + "2016-08-12 14:43:26" + "','备注'" + ")," );
}
// 构建完整SQL
String sql = prefix + suffix.substring( 0 , suffix.length() - 1 );
// 添加执行SQL
pst.addBatch(sql);
// 执行操作
pst.executeBatch();
// 提交事务
conn.commit();
// 清空上一次添加的数据
suffix = new StringBuffer();
}
// 头等连接
pst.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
// 结束时间
Long end = new Date().getTime();
// 耗时
System.out.println( "1000万条数据插入花费时间 : " + (end - begin) / 1000 + " s" );
System.out.println( "插入完成" );
}
}
|
结果:
哈哈,1000万条数据288秒完成,是不是感觉超级牛逼,我每次插入10万条数据就提交一次事务,如果是一条一条差的话估计要好几个小时,网上有人试过时间浪费在数据库的连接上了,后来我想测试插入100万条数据时候数据库引擎的差别首先把代码中最外层的循环i=100改为i=10;1.数据库引擎为MyISAM时:27s,这个我忘了截图了。因为我后来测试InnoDB的时候我换了一个表来测试,因为我发现改不了数据库表的引擎。。。。所以只能换一个表来测试
1.数据库引擎为InnoDB时:
用了77秒,比MyISAW慢了3倍左右,估计要是1000万条数据的时候更慢吧。。。
插入1000万条数据到mysql数据库表相关推荐
- 绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来
我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: ...
- mysql 1000万数据读取_插入1000万条数据到mysql数据库表
转自:https://www.cnblogs.com/fanwencong/p/5765136.html 我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入100 ...
- 力控数据写入mysQL_绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来...
我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: ...
- 批量往mysql里面插入1000万条数据_绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来...
我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: ...
- 4分钟插入1000万条数据到mysql数据库表
准备工作 我用到的数据库为,mysql数据库8.0版本的,使用的InnoDB存储引 创建测试表 CREATE TABLE `product` (`id` int NOT NULL AUTO_INCRE ...
- mysql 插入秒_教你88秒插入1000万条数据到mysql数据库表,IG牛逼
我用到的数据库为,mysql数据库5.7版本的首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: com ...
- java mysql 快速插入1000w条数据_教你88秒插入1000万条数据到mysql数据库表
我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: ...
- 教你急速快速批量插入1000万条数据到mysql数据库表面试题
急速快速批量插入1000万条数据到mysql数据库表面试题 教你急速快速批量插入1000万条数据到mysql数据库表&面试题 我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好 ...
- 多线程实现一分钟插入1000万条数据
首先我们需要建立一个线程类,继承Thread类,并实现run方法 1.获取数据库连接 2.编写插入的sql语句 3.关闭自动提交 conn.setAutoCommit(false); 4.编写for ...
最新文章
- Sprint第二个冲刺(第八天)
- 网上的假货太多,你把握不住的,让AI来
- 树莓派c语言访问mariadb,树莓派之MariaDB
- 数据传输示例 Moves.asm
- ASP.NET【4】--ASHX
- HDU 6030 Happy Necklace
- android 键盘遮盖输入框_Android各种键盘挡住输入框解决办法
- sam格式的结构和意义_各种格式的练字本,对写字真有帮助吗
- 算法:合并排序(Merge Sort)
- mysql查询当前库的实例名_oracle查询数据库名、实例名等
- 方形物体绕中心旋转的扭力_转轴扭力测试方案
- python学习链接
- U盘安装Ubuntu
- 8-子午和卯酉圈曲率半径
- cta 音频测试_CTA测试介绍.pdf
- 64位win7下安装keras的过程
- ubuntu下使用netplan配置网络
- 前端CSS核心内容定位
- 命令执行原理和利用知识点
- 无显卡本地运行katago围棋程序
热门文章
- Nulgrind:最小的Valgrind工具
- 九章算法 | Facebook 面试题 : 岛的周长
- burp intruder爆破出现 Payload set 1: Invalid number settings的解决办法
- jqgrid实现客户端导出Excel、txt、word、json等数据格式的文件
- mongoose 执行删除操作的坑
- .net 使用RabbitMQ demo
- C#设置系统日期时间格式
- python - HTMLTestRunner 测试报告模板设置
- linux主机名的修改
- 使用ASP .NET (C#) 產生PDF檔的好幫手—iTextSharp library (上)