mysql 插入百万级数据 简单靠谱的方法
2017-04-12 11:27
225 查看
之前学习mysql的时候,想要试着插入百万、千万级别的测试数据,看了下网上的不少博客,基本都是复制copy,大多数都是用个存储过程就直接循环插入。。
比如:
这里就先插800条试试水。。
结果800条就用了半分钟,简直不能忍啊
经过查阅不少信息,发现每次insert的时候mysql都会自动提交,然后会有其他的一些耗时的操作,所以。。。。。取消掉自动提交不就好了嘛。。。直接 SET AUTOCOMMIT=0;
代码如下:
试试800条
秒秒钟的事
继续加大量8千、8万、80万。。。1千万。。
1千万只用的3分钟(100万10多秒就差不多了)
验证哈插入的数据
数量正确,数据也没问题,大功告成!
———————————————————-分割线————————————————————————
然后又发现个更简单的方法。。直接用insert into … select … from …就行了
也就是不停地复制表里的数据,再插入
看看效果
百万级也就是几十秒到一两分钟的事
当然,要在java里用jdbc写代码也行,尽量避免循环insert操作,最好先拼接好sql,一次执行,毕竟每次都io太耗时,也可以把自动提交给关了,调用conn.setAutoCommit(false),再循环插。。
over
比如:
drop table if exists test; create table test (c1 int(11) default NULL,c2 varchar(30) default NULL,c3 date default NULL); drop PROCEDURE if exists test_insert; delimiter // CREATE PROCEDURE test_insert() begin declare v int default 0; while v < 800 do insert into test values (v,'testing partitions',adddate('1995-01-01',(rand(v)*36520) mod 3652)); set v = v + 1; end while; end //
这里就先插800条试试水。。
结果800条就用了半分钟,简直不能忍啊
经过查阅不少信息,发现每次insert的时候mysql都会自动提交,然后会有其他的一些耗时的操作,所以。。。。。取消掉自动提交不就好了嘛。。。直接 SET AUTOCOMMIT=0;
代码如下:
drop table if exists test; create table test (c1 int(11) default NULL,c2 varchar(30) default NULL,c3 date default NULL); drop PROCEDURE if exists test_insert; delimiter // CREATE PROCEDURE test_insert(n int) begin declare v int default 0; SET AUTOCOMMIT=0; while v < n do insert into test values (v,'testing partitions',adddate('1995-01-01',(rand(v)*36520) mod 3652)); set v = v + 1; end while; SET AUTOCOMMIT=1; end //
试试800条
秒秒钟的事
继续加大量8千、8万、80万。。。1千万。。
1千万只用的3分钟(100万10多秒就差不多了)
验证哈插入的数据
数量正确,数据也没问题,大功告成!
———————————————————-分割线————————————————————————
然后又发现个更简单的方法。。直接用insert into … select … from …就行了
也就是不停地复制表里的数据,再插入
drop table if exists test2; create table test2 (c1 int(11) default NULL,c2 varchar(30) default NULL); insert into test2 values(1,'a'),(2,'b'),(3,'c'); insert into test2 select * from test2;
看看效果
百万级也就是几十秒到一两分钟的事
当然,要在java里用jdbc写代码也行,尽量避免循环insert操作,最好先拼接好sql,一次执行,毕竟每次都io太耗时,也可以把自动提交给关了,调用conn.setAutoCommit(false),再循环插。。
over
相关文章推荐
- 最简单的导出mysql数据的方法
- mysql 插入数据后返回当前的自增ID方法
- mysql中迅速插入百万条测试数据的方法
- Mysql5.5 大量数据插入出现的抖动问题 及 解决方法
- 关于mysql处理百万级以上的数据时如何提高其查询速度的方法
- 简单学习PHP向MYSQL中插入数据的代码
- JDBC 3种获得mysql插入数据的自增字段值的方法
- JDBC 3种获得mysql插入数据的自增字段值的方法
- Linux编程向Mysql插入中文数据显示乱码的解决方法
- 简单mysql备份恢复数据的方法.
- mysql插入多行数据的方法
- mysql如果数据不存在,则插入新数据,否则更新的实现方法
- mysql 数据插入优化方法
- mysql中迅速插入百万条测试数据的方法
- 从MySQL到MongoDB(添加MongoDB循环插入数据方法)
- php向MySQL插入数据不全 解决方法
- 将Excel中的数据导入MySQL的简单方法
- ECMall的MySQL数据调用的简单方法
- mysql如果数据不存在,则插入新数据,否则更新的实现方法
- DataFactory往Mysql插入数据失败解决方法