背景:
在特定场景测试中时,需要构造10000张表,每张表中1000条数据。
创建库:
存储过程是基于数据库的,首先创建一个测试库
drop database if exists performanceTest;
create database performanceTest charset utf8;
use performanceTest;
创建存储过程:
在交互式shell中,分号本身代表语句结束,但是存储过程本身带有分号,因此需要先更改结束符号为//
DELIMITER //;
新建表的存储过程,num代表需要创建表的数量
create procedure quickAddTb(IN num INTEGER)
begin
declare var int;
declare tableName varchar(32);
set var=0;
while var<num do
set tableName=concat('test',var);
set @STMT:=concat('create table ',tableName,'(
id int auto_increment key,
ipAddr varchar(32),
email varchar(32));');
PREPARE STMT FROM @STMT;
EXECUTE STMT;
set var=var+1;
end while;
end;//
插入表数据的存储过程,tbnum代表表数量,tbrow代表表行数
create procedure insertData(IN tbnum INTEGER, tbrow INTEGER)
begin
declare var int;
declare row int;
declare tableName varchar(32);
set var=0;
while var<tbnum do
set tableName=concat('test',var);
set row=0;
while row<tbrow do
set @INS:=concat('insert into ',tableName,' values(null,''192.168.18.12'',''7123456@qq.com'');');
select @INS;
PREPARE INS FROM @INS;
EXECUTE INS;
set row=row+1;
end while;
set var=var+1;
end while;
end;
查询存储过程
select * from mysql.proc;
删除存储过程
drop procedure performanceTest.quickAddTb; drop procedure
performanceTest.insertData;
执行存储过程
call performanceTest.quickAddTb(10000);
call performanceTest.insertData(10000,1000);