200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > mysql利用存储过程批量插入数据【MySQL】

mysql利用存储过程批量插入数据【MySQL】

时间:2023-12-29 17:34:44

相关推荐

mysql利用存储过程批量插入数据【MySQL】

数据库|mysql教程

过程,数据

数据库-mysql教程

最近需要测试一下mysql单表数据达到1000W条以上时增删改查的性能。由于没有现成的数据,因此自己构造,本文只是实例,以及简单的介绍。

android记事本源码,联想安装Ubuntu出错,tomcat监控的哪家好,刺猬猫爬虫,自学php制作网站,下架产品会影响独立站的seo吗lzw

首先当然是建表:

留言板源码,vscode打开git树,ubuntu查搜狗,tomcat监控口碑好,sqlite3记录系统时间,房间里老是有爬虫怎么回事,php访问常量,荆门seo优化推广价格,多语言网站怎么实现,微信活动模板下载lzw

CREATE TABLE `fortest` ( `ID` INT(30) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `IP` VARCHAR(32) NOT NULL, `OID` VARCHAR(15) DEFAULT NULL)

其次,构建存储过程:

图像相似度比较源码,vscode打开扩展菜单栏,ubuntu利用ssd,tomcat里面的root,后世纪 爬虫,php做购物车,东台seo优化关键词制作,网站后台编辑器不能正常显示lzw

DELIMITER $$USE `插入表所在的数据库名字`$$DROP PROCEDURE IF EXISTS `autoinsert`$$CREATE DEFINER=`root`@`192.168.137.10` PROCEDURE `autoinsert`(IN IP_NUM INT, IN OID_NUM INT)BEGIN DECLARE iIP INT DEFAULT 0 ; DECLARE iOID INT DEFAULT 0 ;WHILE(iIP < IP_NUM) DOSET iOID = 0;WHILE(iOID<OID_NUM)DO SET @mySql=CONCAT("INSERT INTO fortest (IP, OID) VALUES(CONCAT((ROUND(RAND() * 255) + 1),.,(ROUND(RAND() * 255) + 1),.,(ROUND(RAND() * 255) + 1),.,(ROUND(RAND() * 255) + 1)),ROUND(RAND()*100)+1);");PREPARE stmt FROM @mySql; EXECUTE stmt;DEALLOCATE PREPARE stmt; SET iIP = iIP+1;END WHILE; SET iPC = iPC+1; END WHILE; END$$DELIMITER ;

上述存储过程指定了两个输入参数:IP_NUM OID_NUM,两个参数分别指定了有多少台机器,以及每台机器有多少OID。

之后调用存储过程就可以了:

call autoinsert 1000 50

意思是,有100台机器,每个机器有50个参数。

这样,我们就构建了50000条数据,如果按上述存储过程,想达到1000W的数据,还是要花点时间的。可以采用如下方法,进一步提高速度:

首先创建具有同样表结构的表:

CREATE TABLE fortest_2 LIKE fortest;

然后根据fortest表插入5W条数据

INSERT INTOfortest_2(IP,OID) SELECT IP,ROUND(RAND() * 100) + 1) FROM fortest;

上述一条语句执行速度特别快,瞬间就插入了5W条数据。可以写个脚本执行:

#!/bin/bashi=1;MAX_INSERT_ROW_COUNT=$1;j=0;while [ $i -le $MAX_INSERT_ROW_COUNT ]do time mysql -h192.168.137.1 -uroot -p123456 fortest -e "INSERT INTOfortest_2(IP,OID) SELECT IP,ROUND(RAND() * 100) + 1) FROM fortest;" echo "INSERT $i " i=$(($i+1))# sleep 0.05doneexit 0

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。