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

    近期须要測试一下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




     


     

  • 相关阅读:
    B站使用总结
    安装国外浏览器的好处
    查看网页源代码
    如何下载bilibili上面的视频
    11.27
    11.26
    11.25
    11.24获取时间
    11.23
    11.21
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5268262.html
Copyright © 2011-2022 走看看