ホームページ > データベース > mysql チュートリアル > mysql利用存储过程批量插入数据_MySQL

mysql利用存储过程批量插入数据_MySQL

WBOY
リリース: 2016-06-01 13:04:14
オリジナル
1120 人が閲覧しました

最近需要测试一下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),&#39;.&#39;,(ROUND(RAND() * 255) + 1),&#39;.&#39;,(ROUND(RAND() * 255) + 1),&#39;.&#39;,(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
ログイン後にコピー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート