mysql利用儲存過程批量插入資料

2021-06-26 16:13:44 字數 1537 閱讀 3580

最近需要測試一下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)

doset ioid = 0;

while(ioid上述儲存過程指定了兩個輸入引數: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

mysql利用儲存過程批量插入一千萬資料(半小時)

示例 向user表中插入一千萬條資料,其中user id11位手機號隨機,可以重複 age為18 27之間 count隨機金額,八位小數 status二百萬資料為1,八百萬資料為0。如果該名字儲存過程已存在,則刪除 drop procedure ifexists proc initdata1 建立 ...

MySql批量插入資料 儲存過程

批量插入儲存過程 create procedure auto insert in indexs int,in loops int begin declare v sql longtext set v sql insert into t info name,time values while inde...

MySQL 利用儲存過程while迴圈插入資料

個人學習的時候通常需要創造一些測試資料,一般是利用儲存過程。例如向test表中插入大量資料 create table test id int 11 not null auto increment,name varchar 10 default null,primary key id 定義語句結束符為...