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

举报
扶醉 发表于 2021/01/01 00:24:16 2021/01/01
【摘要】 示例: 向user表中插入一千万条数据,其中user_id11位手机号随机,可以重复;age为18-27之间;count随机金额,八位小数;status二百万数据为1,八百万数据为0。 -- 如果该名字存储过程已存在,则删除 DROP PROCEDURE IF EXISTS proc_initData1; -- 创建 CREATE PROCEDURE proc_ini...

示例:
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;

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

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

文章来源: fuzui.blog.csdn.net,作者:极客时代,版权归原作者所有,如需转载,请联系作者。

原文链接:fuzui.blog.csdn.net/article/details/94397405

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。