MySQL 使用存储过程插入千万数据

由于项目有数据导入数据库的需要,因此,准备一些测试数据也是很有必要的。我从公司服务器上导出了一张中间表,字段不多,数据量960w多点,用作平时练手,不过随着使用的深入,发现这点数据量已经不能满足我的需要了,决定动手写个存储过程人工增加点数据量,废话不多说了,看图,这时导出时的数据量,就是没增加前的数据量:

MySQL 使用存储过程插入千万数据_第1张图片

导入到本地数据库后,试着查询了一下count,速度在15s左右,还能接受,查询中位的一段数据用limit花费时间大概7秒,减了一半,不过数据量还是不太够,下边开始加数据!

#定义存储过程
delimiter //
DROP PROCEDURE IF EXISTS insert_test_val;
CREATE PROCEDURE insert_test_val(in id Long,in userid Long)
BEGIN
DECLARE i Long default 1;
DECLARE a Long default 18121093272;
DECLARE b Long default 202113672359;
WHILE i<=10000000 do
INSERT into 1000w(id,userid) values (a,b);
SET i = i + 1;
SET a = a + 1;
SET b = b + 1;
END WHILE;
END
//

如上,使用delimiter防止SQL见到“;”就执行,创建存储过程,添加两个变量,因为是循环插入,所以定义一个循环参数,使用while...do...进行循环。为了数据统一,默认的a,b,值我接着已有的数据写了,存储过程创建完成,下边执行一下:

call insert_test_val(18121093272,10000000);

等了一段时间,数据终于insert完毕,看下结果:

MySQL 使用存储过程插入千万数据_第2张图片

整个过程中电脑开了两个eclipse,4个浏览器窗口,两个QQ,一个POSTMAN,navicat,大概算了一下,平均每秒插入数据量在6703条,据说mysql理想情况下数据量是1-10w/s,还是有差距的,不过在我测试的条件来看,还是能够接受的。下边看一下结果:

MySQL 使用存储过程插入千万数据_第3张图片

哈哈,果不其然,查询速度减慢了一半,有了这些数据,做起测试来估计会更顺手些,注意一点的是,使用navcat时delimiter竟然会没有提示,而且这个中间表是String类型的,在数据库中就是varchar类型的,我在存储过程中使用了long类型,竟然没报错,也省得我在插入时转换的麻烦了,接下来有机会写一写查询优化的SQL。

 

你可能感兴趣的:(数据库操作)