mysql利用存储过程批量插入一千万数据(半小时)

示例:
user表中插入一千万条数据,其中user_id11位手机号随机,可以重复;age为18-27之间;count随机金额,八位小数;status二百万数据为1,八百万数据为0。

-- 如果该名字存储过程已存在,则删除
DROP PROCEDURE IF EXISTS proc_initData1;
-- 创建
CREATE PROCEDURE proc_initData1 ( ) BEGIN
	DECLARE
		i INT DEFAULT 0;
	DECLARE
		uid VARCHAR ( 255 ) DEFAULT 0;
	DECLARE
		count DECIMAL(20,8) DEFAULT 0;
	DECLARE
		op INT DEFAULT 0;
	DECLARE
		age INT DEFAULT 0;
	START TRANSACTION;
	WHILE
			i <= 10000000 DO
		SELECT
			CONCAT( '1', CEILING( RAND( ) * 9000000000+1000000000 ) ) INTO uid;
		SELECT
			FLOOR( 18 + ( RAND( ) * 9 ) ) INTO age;
		SELECT
			ROUND( ( 10 + ( RAND( ) * 1001 ) ), 8 ) INTO count;
		IF
			i % 5 = 0 THEN
				INSERT INTO user ( user_id, age, count, status )
			VALUES
				( uid, age, count, 1);
			ELSE INSERT INTO ryw_intelligent_dog ( user_id, age, count, status)
			VALUES
				( uid, age, count, 0 );
		END IF;
		
		SET i = i + 1;
		
	END WHILE;
	COMMIT;
	
END

-- 调用
CALL proc_initData1 ( );


-- 删除表数据
truncate table user;

亲测需要半小时左右,前提删除索引,引擎innodb。
总结:在开始编写时并未使用事物手动提交,导致数据量插入非常慢。在批量插入大量数据时,要删除索引,并开启事物手动提交。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客时代

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值