zoukankan      html  css  js  c++  java
  • mysql利用存储过程批量插入数据

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

    首先当然是建表:

    1. CREATETABLE `fortest` (  
    2.   `ID` INT(30) UNSIGNED NOTNULL AUTO_INCREMENT PRIMARYKEY,  
    3.   `IP` VARCHAR(32) NOTNULL,  
    4.   `OID` VARCHAR(15) DEFAULTNULL)  

    其次,构建存储过程:

    1. DELIMITER $$  
    2. USE `插入表所在的数据库名字`$$  
    3. DROPPROCEDURE IF EXISTS `autoinsert`$$  
    4. CREATE DEFINER=`root`@`192.168.137.10` PROCEDURE `autoinsert`(IN IP_NUM INTIN OID_NUM INT)  
    5. BEGIN
    6. DECLARE iIP INTDEFAULT 0 ;  
    7. DECLARE iOID INTDEFAULT 0 ;     
    8.    WHILE(iIP < IP_NUM)  
    9.     DO  
    10. SET iOID = 0;  
    11.       WHILE(iOID
    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. DEALLOCATEPREPARE 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. CREATETABLE fortest_2 LIKE fortest;  


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

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

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

    [plain]view plaincopy在CODE上查看代码片派生到我的代码片
     
    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  




  • 相关阅读:
    hiveserver2 with kerberos authentication
    python Basic usage
    python Quicksort demo
    Python HeapSort
    mrunit for wordcount demo
    CCDH证书
    Hadoop question list
    Hadoop Yarn core concepts
    Hadoop Resource
    Hadoop could not find or load main class
  • 原文地址:https://www.cnblogs.com/hllnj2008/p/5138796.html
Copyright © 2011-2022 走看看