mysql利用存储过程批量插入一千万数据(半小时)
【摘要】 示例: 向user表中插入一千万条数据,其中user_id11位手机号随机,可以重复;age为18-27之间;count随机金额,八位小数;status二百万数据为1,八百万数据为0。
-- 如果该名字存储过程已存在,则删除
DROP PROCEDURE IF EXISTS proc_initData1;
-- 创建
CREATE PROCEDURE proc_ini...
示例:
向user
表中插入一千万条数据,其中user_id
11位手机号随机,可以重复;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。
总结:在开始编写时并未使用事物手动提交,导致数据量插入非常慢。在批量插入大量数据时,要删除索引,并开启事物手动提交。
文章来源: blog.csdn.net,作者:极客时代,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq_39329616/article/details/94397405
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)