mysql利用預存程序批量插入資料,mysql預存程序插入

來源:互聯網
上載者:User

mysql利用預存程序批量插入資料,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/bashi=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.05doneexit 0




 


 


怎使用MySQL實現批量插入資料

用預存程序,寫個迴圈給你個我以前寫的看看
begin
declare i int;
declare b int;
declare c int;
set @i=2;
set @b=6;
set @c=0;
set @stmt = concat('insert into t_j_goods_name (id,`code`,`name`)
values(?,?,(select distinct `a` from sheet1 limit ?, 1))');
while @i<442 do
prepare s1 from @stmt;

execute s1 using @b,@i,@c;

deallocate prepare s1;
set @i=@i+1,@b=@b+1,@c=@c+1;

end while;
end
 
預存程序批量插入資料問題

create proc pc_Text
@number_star int,
@number_end int
as
declare @int int
set @int=@number_end-@number_star+1
while(@int>0)
begin
select @int= count(1) from Text where aNumber1=@number_star
if(@int=1) --如果存在變化就不插入
begin
set @number_star=@number_star+1
set @int=@number_end-@number_star+1

end
else
begin
insert into Text value(@number_star ,...)
set @number_star=@number_star+1
set @int=@number_end-@number_star+1

end
end
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.