最近需要測試一下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 定義語句結束符為...