您好,欢迎访问一九零五行业门户网

mysql利用存储过程批量插入数据_MySQL

最近需要测试一下mysql单表数据达到1000w条以上时增删改查的性能。由于没有现成的数据,因此自己构造,本文只是实例,以及简单的介绍。
首先当然是建表:
create table `fortest` ( `id` int(30) unsigned not null auto_increment primary key, `ip` varchar(32) not null, `oid` varchar(15) default null)
其次,构建存储过程:
delimiter $$use `插入表所在的数据库名字`$$drop procedure if exists `autoinsert`$$create definer=`root`@`192.168.137.10` procedure `autoinsert`(in ip_num int, in oid_num int)begin declare iip int default 0 ; declare ioid int default 0 ; while(iip < ip_num) do set ioid = 0; while(ioid 上述存储过程指定了两个输入参数:ip_num oid_num,两个参数分别指定了有多少台机器,以及每台机器有多少oid。
之后调用存储过程就可以了:
call autoinsert 1000 50
意思是,有100台机器,每个机器有50个参数。
这样,我们就构建了50000条数据,如果按上述存储过程,想达到1000w的数据,还是要花点时间的。可以采用如下方法,进一步提高速度:
首先创建具有同样表结构的表:
create table fortest_2 like fortest;
然后根据fortest表插入5w条数据
insert intofortest_2(ip,oid) select ip,round(rand() * 100) + 1) from fortest;
上述一条语句执行速度特别快,瞬间就插入了5w条数据。可以写个脚本执行:
#!/bin/bashi=1;max_insert_row_count=$1;j=0;while [ $i -le $max_insert_row_count ]do time mysql -h192.168.137.1 -uroot -p123456 fortest -e insert intofortest_2(ip,oid) select ip,round(rand() * 100) + 1) from fortest; echo insert $i i=$(($i+1))# sleep 0.05doneexit 0
其它类似信息

推荐信息