存储过程批量插入随机数据

前些天为了给系统做压力测试,要求每个部门的人员与角色随机并且分布合理平均,开始利用存储过程插入大数据随机量数据,此方法比较慢,效率低  本程序插入一百万条记录用时大约在500s,效率太低,最后总结了一下原因是因为大部分时间浪费在了产生随机数据上
最后改用JDBC,效率反而挺可观

#创建存储过程
drop procedure if exists insertPerson;#如果存在储存过程则删除
 #delimiter $$ #创建一个储存过程
 create procedure insertPerson()
 begin
  # @Job_Number; 工号
  # @Person_Name; 姓名
  # @Sex; 性别
  # @BU_ID; 部门
  # @Position_Code; 职位
  # @PositionGrade_Code; 职级
  # @ResType_Code; 资源类型
  #@JoinIn_Date; 入职时间
  # @Dimission_Date; 离职时间
  # @Create_Time; 创建时间',
  # @Org_ID; 组织编码',
  # @Status1; 人员状态(0:删除,1:正常,2:被削减,3:离职)',
  # @Verify_Flag; 人员信息验证状态,0-未验证,1-已验证',
  # @person_type; 人员类别',
  # @person_category; 人员类别,1:正式员工;2:试用员工;3:实习生',
  SET @num=200001;
  SET @count=1; #循环次数
  SET @BU_ID=1;
 while @count<1000001 do #如果@a<10001则返回true,继续执行
  SET @Job_Number=CONCAT('E',@num); #工号
  SET @Person_Name=rand_string(3); #姓名,随即赋值
  SET @Sex=FLOOR(RAND()*2); #性别,随即赋值,0或者1
  SET @Status1=FLOOR(RAND()*4);
  SET @person_category=FLOOR(RAND()*3)+1;
  SET @Verify_Flag=FLOOR(RAND()*2);
  SET @Org_ID=FLOOR(RAND()*27+1);
  SET @ResType_Code=FLOOR(RAND()*3+1);
  SET @Create_Time='2013-12-25';
  SET @JoinIn_Date=str_to_date('2013-01-01 00:00:00','%Y-%m-%d %H:%i:%s');
  SET @Dimission_Date=date_add(@JoinIn_Date, interval 400 day);
 insert into jf_t_person(Job_Number,Person_Name,Sex,BU_ID,Position_Code,PositionGrade_Code,ResType_Code,JoinIn_Date,Dimission_Date,
     Create_Time,Org_ID,Status,Verify_Flag,person_type,person_category)
     values(@Job_Number,@Person_Name,  @Sex,@BU_ID,@Position_Code,@PositionGrade_Code,@ResType_Code,@JoinIn_Date,@Dimission_Date,@Create_Time,@Org_ID,@Status1,@Verify_Flag, @person_type,@person_category); 
 set @count=@count+1;
     if @count%100=0 #每个部门一百人
     then
         set @BU_ID=@BU_ID+1;
      end if;
  SET @num=@num+1;
 end while;
 end
 #delimiter ;
  #执行存储过程插入数据
 call insertPerson();
 

  #创建一个随机产生字符串的函数
 set global log_bin_trust_function_creators = 1;
 DROP FUNCTION IF EXISTS rand_string;
 #DELIMITER //
 CREATE FUNCTION rand_string(n INT)
 RETURNS VARCHAR(255)
 BEGIN
   DECLARE chars_str varchar(100) DEFAULT'冯海兵白宇贾蓉蓉灰太狼喜洋洋丽丽圆圆隆冬强倩倩玲玲任宏龚正曹彦斌齐如曹天野张王李冬冬赵东东';
  DECLARE return_str varchar(255) DEFAULT 'preTest_';
   DECLARE i INT DEFAULT 0;
         WHILE i < n DO
          SET return_str = concat(return_str,substring(chars_str , FLOOR(1 + RAND()*43 ),1));#52代表在52个字母中随即找出一个
          SET i = i +1;
          END WHILE;
           #SET return_str='preTest_'+return_str;
          RETURN return_str;
 END
 #delimiter ;
  #创建一个随机产生字符串的函数,0和1随机出现
 set global log_bin_trust_function_creators = 1;
 DROP FUNCTION IF EXISTS rand_sex;
 #DELIMITER //
 CREATE FUNCTION rand_sex(n INT)
 RETURNS VARCHAR(255)
 BEGIN
   DECLARE chars_str varchar(100) DEFAULT '01';
   DECLARE return_str varchar(255) DEFAULT '';
   DECLARE i INT DEFAULT 0;
       WHILE i < n DO
           SET return_str = concat(return_str,substring(chars_str , FLOOR(1 + RAND()*2 ),1));
           SET i = i +1;
              END WHILE;
              RETURN return_str;
 END
 #delimiter ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值