mysql利用存储过程批量插入数据
2016-03-12 11:37
761 查看
近期须要測试一下mysql单表数据达到1000W条以上时增删改查的性能。因为没有现成的数据,因此自己构造。本文仅仅是实例。以及简单的介绍。
首先当然是建表:
其次。构建存储过程:
上述存储过程指定了两个输入參数:IP_NUM OID_NUM,两个參数分别指定了有多少台机器,以及每台机器有多少OID。
之后调用存储过程就能够了:
意思是,有100台机器。每一个机器有50个參数。
这样,我们就构建了50000条数据,假设按上述存储过程,想达到1000W的数据。还是要花点时间的。能够採用例如以下方法,进一步提快速度:
首先创建具有相同表结构的表:
然后依据fortest表插入5W条数据
上述一条语句运行速度特别快,瞬间就插入了5W条数据。能够写个脚本运行:
首先当然是建表:
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延迟更新索引(delay_key_write)
- MySQL时间函数
- MySQL索引类型一览 让MySQL高效运行起来
- mysql 索引类型详解-B-Tree索引
- MySQL的mysql_insert_id和LAST_INSERT_ID(转)
- mysql主主互备模式配置!!!
- MySQL索引类型总结和使用技巧以及注意事项
- mysql互换表中两列数据方法
- Mysql命令-求一列字段的总和
- mysql-5.7.11-winx64中mysql.exe双击无法看到进程,CMD下3534错误,无法启动的解决方法
- mysql-5.7.11-winx64中mysql.exe双击无法看到进程,CMD下3534错误,无法启动的解决方法
- Mysql 5.7免安装版配置 win10
- cmd mysql导入数据库报错Unkonwn command ‘\''’ 或 Unkonwn command ‘\n''’
- Ubuntu 安装mysql和简单操作
- 阿里云 mysql的远程访问问题
- mysql root密码
- 在Ubuntu上源码安装MySQL+安装问题解决+安全优化
- 在Ubuntu上部署开源博客系统Blog_mini
- 在Ubuntu上使用apt-get安装MySQL+安全优化
- mysql,免安装,1067错误