mysql 导入大量测试数据--存储过程

前提摘要

目录

前提摘要

统一提交事务

新的测试代码代码 分段开启事务以及提交事务


关闭唯一性校验
在导入数据前执行 SET UNIQUE_CHECKS=0,关闭唯一性校验,
在导入结束后执行SET UNIQUE_CHECKS=1,恢复唯一性校验,可以提高导入的效率。

手动提交事务
如果应用使用自动提交的方式,建议在导入前执行 SET AUTOCOMMIT=0,关闭自动提交,
导入结束后再执行 SET AUTOCOMMIT=1,打开自动提交,也可以提高导入的效率。

统一提交事务

定义存储过程

delimiter $
create procedure insert_data()
begin
declare i int default 1;
while (i<3000000) do
insert into segment values (concat('',i),100+i,i,' ',now());
set i=i+1;
end while;
end$
delimiter ;

调用存储过程

SET UNIQUE_CHECKS=0;
SET AUTOCOMMIT=0;

call insert_data();


SET UNIQUE_CHECKS=1;
SET AUTOCOMMIT=1;

segment的表结构

CREATE TABLE `segment` (
  `business_tag` varchar(128) NOT NULL COMMENT '业务标识',
  `max_id` bigint(20) NOT NULL COMMENT 'biz_tag目前所被分配的ID号段的最大值',
  `step` int(11) NOT NULL COMMENT '每次分配的号段长度',
  `desc` varchar(255) NOT NULL COMMENT '行记录描述',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录的更新时间',
  PRIMARY KEY (`business_tag`) USING BTREE,
  KEY `idx_businessTag_maxId_step` (`business_tag`,`max_id`,`step`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='leaf_segment数据库方案'

新的测试代码代码 分段开启事务以及提交事务

/*建表test1*/
DROP TABLE IF EXISTS test1;
CREATE TABLE test1 (
  id     INT NOT NULL COMMENT '编号',
  name   VARCHAR(20) NOT NULL COMMENT '姓名',
  sex TINYINT NOT NULL COMMENT '性别,1:男,2:女',
  email  VARCHAR(50)
);
/*准备数据*/
DROP PROCEDURE IF EXISTS proc1;
DELIMITER $
CREATE PROCEDURE proc1()
  BEGIN
    DECLARE i INT DEFAULT 1;
    START TRANSACTION;
    WHILE i <= 4000000 DO
      INSERT INTO test1 (id, name, sex, email) VALUES (i,concat('javacode',i),if(mod(i,2),1,2),concat('javacode',i,'@163.com'));
      SET i = i + 1;
      if i%10000=0 THEN
        COMMIT;
        START TRANSACTION;
      END IF;
    END WHILE;
    COMMIT;
  END $
DELIMITER ;

#调用存储过程
CALL proc1();

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值