概述使用场景:测试时需要
插入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 批量插入数据过多的解决方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
评论列表(0条)