教你使用MySQL仅调用一个存储过程创建三千万条数据

通常我们要创建几条数据通过一条条插入是没问题,但是当我们插入的是100条、1000条、甚至接下来我们要演示的三千万条,显然只有通过更加便捷的方式才是可取的,因为对于需要批量处理和重复性很高的业务可以封装存储过程,然后一个调用即可(如果还没了解过MySQL的存储过程的小伙伴,可以看我下面这篇文章,这里不再赘述)

MySQL存储过程(最全最通透)

接下来教你如何使用MySQL仅调用一个存储过程创建三千万条数据
首先创建一个user表
在这里插入图片描述
然后写我们的代码
这里有一个需要注意的点:
存储过程中设置了不自动提交SQL(就是下面这句),为什么呢?

SET autocommit = 0;	-- 设置不自动提交SQL

因为我们每循环一次插入一条数据,需要走两步,一步插入业务,一步自动提交业务,插入少量数据的话当然没有问题,但是当要插入的数据量是三千万条,相当于两步乘上三千万条数据,可想而知有得等。但是设置了不自动提交,那么就会等你执行完所有插入业务,才统一用 commit 提交一次(简单的说就是存够了三千万数据才给你提交上去),提高了效率。

代码示例

DELIMITER //	-- 重置分隔符
CREATE PROCEDURE addUser(IN number INT)	-- 定义一个int类型参数传参
BEGIN
	DECLARE i INT DEFAULT 0;	-- 定义int类型变量i默认值为0
	SET autocommit = 0;	-- 设置不自动提交SQL
	WHILE i < number DO
	INSERT INTO user(username,password,sex,phone) VALUES(CONCAT("用户_",i),UUID(),ROUND(RAND()*1),FLOOR(RAND()*(999999999-100000000)+100000000));
	SET i = i + 1;
	END WHILE;
	COMMIT;	-- 要记得提交,否则数据不会显示在图形界面,那么它的业务是在未提交状态
END	//

运行完上面的存储过程,那么它会保存到数据库字典中,我们直接CALL 【存储过程名】调用存储过程。

CALL addUser(30000000);	-- 传入30000000值,调用存储过程

…信息区一片空白,还在执行中,三千万条数据不是开玩笑的
在这里插入图片描述
一个多小时之后…

最后运行结果
在这里插入图片描述
建议:
最好还是创建一两百万条数据就可以了(在调用时改参数即可),毕竟三千万数据可是让我苦苦的等上一个多小时呢
(当了一回小白鼠,要四连的哦!)

当然如果你对你的计算机很有自信的话,不妨可以试试,哈哈(但是还是请勿模仿)…

最后:
可能有一些小伙伴会有疑问,为什么需要去创建一个大的数据量呢?

因为我们在接触SQL的时候会发现对数据的查询是我们最常见也是最常用的。一般公司做的项目数据量稍微大一些,如何对SQL查询性能优化是不得不解决的问题,这也是为什么会成为面试时的重灾区。但是如果我们还处在学习阶段,面对的数据量通常都是很小的,那么就很难考虑到查询上的性能问题,以及如何去优化的问题,例如可以通过建立索引的方式来优化,这也是我下一篇我会写的博客文章,如何通过建立索引来提高我们的检索效率,才是真正的主菜。

我是一颗剽悍的种子,一颗偏爱前端的后端新司机。把我会的认真的分享是我写博客的信条,把我代码带走,把你的四连留下,点赞、评论、留言、关注是我写博客的最大动力,哈哈。

猜你喜欢

转载自blog.csdn.net/A_hxy/article/details/106447393