mysql 批量插入数据过多的解决方法

mysql 批量插入数据过多的解决方法,第1张

概述使用场景:测试时需要插入100w的数据,跑sql脚本插入非常慢。存储过程如下://DELIMITERDROP PROCEDURE if EXISTS createAmountCount;create PROCEDURE createAmountCount()BEGINDECLARE i int;set i=0;drop table if exists person ;create table person(id int not null auto_increment,name varchar(40) not null,age int,primary key(id))engine=innodb charset=gb2312;while i<10000DOinsert into person (name, age) values(CONCAT('usercode',i));set i=i+1;end while;END;//DELIMITERCALL createAmountCount(); 解决方案:1. 使用sql 生成100w数据到txt文件中。public static void main(String[] args) throws IOException {// TODO Auto-generated method stubBufferedWriter writer = new BufferedWriter(new FileWriter(new File("D:/driver/data.txt"), true));for(int i=0;i<1000000;i++){if(i%10==0){writer.write("赵"+(i/10)+"t"+ (int)(Math.random()*100)+"n");}if(i%10==1){writer.write("钱"+(i/10)+"t"+ (int)(Math.random()*100)+"n");}if(i%10==2){writer.write("孙"+(i/10)+"t"+ (int)(Math.random()*100)+"n");}if(i%10==3){writer.write("李"+(i/10)+"t"+ (int)(Math.random()*100)+"n");}if(i%10==4){writer.write("郑"+(i/10)+"t"+ (int)(Math.random()*100)+"n");}if(i%10==5){writer.write("吴"+(i/10)+"t"+ (int)(Math.random()*100)+"n");}if(i%10==6){writer.write("周"+(i/10)+"t"+ (int)(Math.random()*100)+"n");}if(i%10==7){writer.write("王"+(i/10)+"t"+ (int)(Math.random()*100)+"n");}if(i%10==8){writer.write("张"+(i/10)+"t"+ (int)(Math.random()*100)+"n");}if(i%10==9){writer.write("刘"+(i/10)+"t"+ (int)(Math.random()*100)+"n");}}writer.close();}2. 数据库中将数据导入表中:create table person(id int not null auto_increment,name varchar(40) not null,age int,primary key(id))engine=innodb charset=gb2312;load data local infile 'D:/driver/data.txt'into table person(name,age);select count(*) from person;耗费时间:[SQL]load data local infile 'D:/driver/data.txt'into table person(name,age);受影响的行: 1000000时间: 10.067s本方案的缺点:1.权限。 非admin用户没有导入。2. 写文件代码。对测试人员来说,写文件不仅仅限于java,可以使用任何语言实现之。 

使用场景:

测试时需要插入100w的数据,跑sql脚本插入非常慢。

存储过程如下:

i i () innodb charset i person (name,age) (CONCAT( ii

解决方案:

1. 使用sql 生成100w数据到txt文件中。

main(String[] args) BuffereDWriter writer = BuffereDWriter( fileWriter( file("D:/driver/data.txt"),( i=0;i<1000000;i++(i%10==0"赵"+(i/10)+"\t"+ ()(Math.random()*100)+"\n"(i%10==1"钱"+(i/10)+"\t"+ ()(Math.random()*100)+"\n"(i%10==2"孙"+(i/10)+"\t"+ ()(Math.random()*100)+"\n"(i%10==3"李"+(i/10)+"\t"+ ()(Math.random()*100)+"\n"(i%10==4"郑"+(i/10)+"\t"+ ()(Math.random()*100)+"\n"(i%10==5"吴"+(i/10)+"\t"+ ()(Math.random()*100)+"\n"(i%10==6"周"+(i/10)+"\t"+ ()(Math.random()*100)+"\n"(i%10==7"王"+(i/10)+"\t"+ ()(Math.random()*100)+"\n"(i%10==8"张"+(i/10)+"\t"+ ()(Math.random()*100)+"\n"(i%10==9"刘"+(i/10)+"\t"+ ()(Math.random()*100)+"\n"

2. 数据库中将数据导入表中:

innodb charset<span >load data local infile <span >'<span >D:/driver/data.txt<span >'
<span >into
<span >table
<span > person(name,age);

<span >select <span >count(<span >*) <span >from person;

耗费时间:

data local infile .067s

本方案的缺点:

1.权限。 非admin用户没有导入。

2. 写文件代码。对测试人员来说,写文件不仅仅限于java,可以使用任何语言实现之。

总结

以上是内存溢出为你收集整理的mysql 批量插入数据过多的解决方法全部内容,希望文章能够帮你解决mysql 批量插入数据过多的解决方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1169155.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存