mysql利用存储过程批量插入数据_MySQL
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql利用存储过程批量插入数据_MySQL,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1829字,纯文字阅读大概需要3分钟。
内容图文
最近需要测试一下mysql单表数据达到1000W条以上时增删改查的性能。由于没有现成的数据,因此自己构造,本文只是实例,以及简单的介绍。首先当然是建表:
CREATE TABLE `fortest` ( `ID` INT(30) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `IP` VARCHAR(32) NOT NULL, `OID` VARCHAR(15) DEFAULT NULL)
其次,构建存储过程:
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) DO SET 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/bash i=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.05 done exit 0
内容总结
以上是互联网集市为您收集整理的mysql利用存储过程批量插入数据_MySQL全部内容,希望文章能够帮你解决mysql利用存储过程批量插入数据_MySQL所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。