当前位置: 首页 > 后端技术 > Java

mysql使用存储过程快速添加百万数据

时间:2023-04-02 00:07:47 Java

前言为了体现不加索引和加索引的区别,需要用到百万数据,但是如果加一个表有百万数据,就很繁琐和麻烦。这里使用存储过程快速添加数据,耗时约4小时。CREATETABLE`t_sales`(`id`int(11)NOTNULLAUTO_INCREMENT,`username`varchar(32)COLLATEutf8_binDEFAULTNULLCOMMENT'用户名',`password`varchar(64)COLLATEutf8_binDEFAULTNULLCOMMENT'密码MD5存储',`register_time`timestampNULLDEFAULTNULLCOMMENT'注册时间',`type`int(1)DEFAULTNULLCOMMENT'用户类型1,2,3,4随机',PRIMARYKEY(`id`),KEY`idx_username`(`username`)USINGBTREE)然后创建存储过程批量添加数据。用户名由常量和数字拼接而成,密码为MD5。报名时间为当前时间,随机向前推几天。类型是1-4的随机范围值。创建过程salesAdd()开始声明iint默认值11;intoblog.t_sales(`username`,`password`,`register_time`,type)values(concat("jack",i),MD5(concat("psswe",i)),from_unixtime(unix_timestamp(now())-楼层(rand()*800000)),楼层(1+rand()*4));设置我=我+1;结束时;end然后调用存储过程callsalesAdd()改进版使用存储过程来添加数据虽然比起一条一条添加更方便快捷,但是添加几百万条数据耗时较长。后来在网上找了很多资料,发现mysql每执行一条语句就自动提交。这个操作非常耗时,因此在添加时删除自动提交。设置SETAUTOCOMMIT=0;createproceduresalesAdd()begindeclareiintdefault1;设置自动提交=0;当我<=4000000插入blog.t_sales(`username`,`password`,`register_time`,type)values(concat("jack",i),MD5(concat("psswe",i)),from_unixtime(unix_timestamp(now())-floor(rand()*800000)),floor(1+rand()*4));设置我=我+1;结束时;设置自动提交=1;end执行时间为387秒,约六分钟,其中一半时间用于md5和随机数的计算。[SQL]调用salesAdd();受影响的行数:0时间:387.691s