首先,我们建立一张测试表,例如t_user
?
1 2 3 4 5 6 7 8 | CREATE TABLE `t_user` ( `id` bigint (20) NOT NULL AUTO_INCREMENT, ` name ` varchar (255) DEFAULT NULL , `age` tinyint(4) DEFAULT NULL , `create_time` datetime DEFAULT NULL , `update_time` datetime DEFAULT NULL , PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
下面,我么通过下面的存储过程来插入1000万条数据。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | delimiter $$ DROP PROCEDURE IF EXISTS proc_batch_insert; CREATE PROCEDURE proc_batch_insert() BEGIN DECLARE pre_name BIGINT ; DECLARE ageVal INT ; DECLARE i INT ; SET pre_name=187635267; SET ageVal=100; SET i=1; WHILE i < 1000000 DO INSERT INTO t_user(` name `,age,phone,create_time,update_time) VALUES (CONCAT(pre_name, '@qq.com' ),(ageVal+1)%30,NOW(),NOW()); SET pre_name=pre_name+100; SET i=i+1; END WHILE; END $$ delimiter ; call proc_batch_insert(); |
经过测试,插入1百万条数据,大约需要10分钟,如果表的字段更多,可能花费的时间更长。
网上有人说预先在程序里面生成数据,然后再通过客户端导入会更快。我尚未亲自实验,但是个人觉得不会有存储过程快,因为不管怎么样,最终执行的还是插入语句。