搜索
查看: 1106|回复: 0

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

[复制链接]

205

主题

5

回帖

753

积分

高级会员

积分
753
发表于 2014-10-31 17:04:15 | 显示全部楼层 |阅读模式

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

首先当然是建表:

  1. CREATE TABLE `fortest` (
  2.   `ID` INT(30) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  3.   `IP` VARCHAR(32) NOT NULL,
  4.   `OID` VARCHAR(15) DEFAULT NULL)
复制代码
其次,构建存储过程:
  1. DELIMITER $

  2. USE `插入表所在的数据库名字`$

  3. DROP PROCEDURE IF EXISTS `autoinsert`$

  4. CREATE DEFINER=`root`@`192.168.137.10` PROCEDURE `autoinsert`(IN IP_NUM INT, IN OID_NUM INT)
  5. BEGIN
  6.   DECLARE iIP INT DEFAULT 0 ;
  7.   DECLARE iOID INT DEFAULT 0 ;   
  8.    WHILE(iIP < IP_NUM)
  9.     DO
  10.       SET iOID = 0;
  11.       WHILE(iOID<OID_NUM)
  12.       DO
  13.         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);");            
  14.         PREPARE stmt FROM @mySql;
  15.         EXECUTE stmt;  
  16.         DEALLOCATE PREPARE stmt;
  17.         SET iIP = iIP+1;
  18.       END WHILE;
  19.         SET iPC = iPC+1;
  20.     END WHILE;

  21.     END$

  22. DELIMITER ;
复制代码

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


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

  1. call autoinsert 1000 50
复制代码

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

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


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

  1. CREATE TABLE fortest_2 LIKE fortest;
复制代码
然后根据fortest表插入5W条数据
  1. INSERT INTOfortest_2(IP,OID) SELECT IP,ROUND(RAND() * 100) + 1) FROM fortest;
复制代码
上述一条语句执行速度特别快,瞬间就插入了5W条数据。可以写个脚本执行:
  1. #!/bin/bash

  2. i=1;
  3. MAX_INSERT_ROW_COUNT=$1;
  4. j=0;
  5. while [ $i -le $MAX_INSERT_ROW_COUNT ]
  6. do
  7.     time mysql -h192.168.137.1 -uroot -p123456 fortest -e "INSERT INTOfortest_2(IP,OID) SELECT IP,ROUND(RAND() * 100) + 1) FROM fortest;"
  8.     echo "INSERT $i "   
  9.     i=$(($i+1))
  10. #    sleep 0.05
  11. done

  12. exit 0
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

 
 
大数据行业交流
大数据行业交流
大数据求职招聘
大数据求职招聘
站长电话:
15010106923
微信联系:
hb-0310
站长邮箱:
ab12-120@163.com
大数据中国微信

QQ   

版权所有: Discuz! © 2001-2013 大数据.

GMT+8, 2024-4-29 12:32 , Processed in 0.129789 second(s), 24 queries .

快速回复 返回顶部 返回列表