mysql优化存储过程中批量插入的速度

来源:互联网 发布:淘宝联盟pc客户端 编辑:程序博客网 时间:2024/05/21 06:43
  • 第一次操作,每一条数据执行一次插入操作。
    一万条数据花费34s,太慢。
CREATE PROCEDURE insertPro(in sum INT)BEGINDECLARE count INT DEFAULT 0;DECLARE i INT DEFAULT 0;set count=0;set i = rand() * 10000;while count<sum do     insert into csvimp(name,age,sex) value(i,i+1,i+2);    set count=count+1;    set i=i+1;    commit;end while;end;
  • 第二次操作,1000条数据提交一次
    一万条数据花费33s多,情况没有改善。
while count<sum do     insert into csvimp(name,age,sex) value(i,i+1,i+2);    set count=count+1;    set i=i+1;    if i%1000=0    then         commit;    end if;end while;commit;
  • 第三次操作,一千条数据拼成一个insert
    一万条花费0.17s,这速度,直接是原来的200倍。
set @exesql = concat("insert into csvimp(name,age,sex) values ");set @exedata = "";while count<sum do     set @exedata = concat(@exedata, ",('", i, "','", i+1, "','", i+2, "')");    set count=count+1;    set i=i+1;    if i%1000=0    then         set @exedata = SUBSTRING(@exedata, 2);        set @exesql = concat("insert into csvimp(name,age,sex) values ", @exedata);        prepare stmt from @exesql;        execute stmt;        DEALLOCATE prepare stmt;        set @exedata = "";    end if;end while;if length(@exedata)>0 then     set @exedata = SUBSTRING(@exedata, 2);    set @exesql = concat("insert into csvimp(name,age,sex) values ", @exedata);    /*    set @exesql = concat("select \"", @exesql, "\" from dual");    */    prepare stmt from @exesql;    execute stmt;    DEALLOCATE prepare stmt;end if;
1 0