性能优化之测试数据准备
Posted zghw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了性能优化之测试数据准备相关的知识,希望对你有一定的参考价值。
#创建表
create table base_dept(id int not null PRIMARY KEY AUTO_INCREMENT,dept_name varchar(50) not null,parent_dept int not null );
create table base_emp(id int not null PRIMARY KEY auto_increment,dept_id int not null,emp_name varchar(20) not null ,entry_date datetime not null,salary decimal(10,2),test_id bigint)
#插入部门数据
insert into base_dept(dept_name,parent_dept) values('董事会',0);
insert into base_dept(dept_name,parent_dept) values('总经理',1);
insert into base_dept(dept_name,parent_dept) values('副总经理',2);
insert into base_dept(dept_name,parent_dept) values('财务部',3);
insert into base_dept(dept_name,parent_dept) values('人力部',3);
insert into base_dept(dept_name,parent_dept) values('市场部',3);
insert into base_dept(dept_name,parent_dept) values('销售部',3);
insert into base_dept(dept_name,parent_dept) values('研发中心',3);
insert into base_dept(dept_name,parent_dept) values('质量部',3);
insert into base_dept(dept_name,parent_dept) values('生产一部',3);
insert into base_dept(dept_name,parent_dept) values('生产二部',3);
#删除存储过程
DROP PROCEDURE IF EXISTS rand_insert;
DELIMITER $$
#批量插入员工数据 存储过程
CREATE PROCEDURE `rand_insert`(n INT)
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i < n DO
insert into base_emp(dept_id,emp_name,entry_date,salary,test_id) values(floor(4+rand()*8),rand_string(floor(6+rand()*18)),concat(floor(1960+rand()*58),'-',floor(1+rand()*12),'-',floor(1+rand()*30),' 00:00:00'),round(5000+rand()*10000,2),floor(1+rand()*200000)
);
SET i = i +1;
END WHILE;
END;
$$
#调用批量存储过程插入程序
call rand_insert(3000000);
#查询表
select * from base_dept;
select * from base_emp;
#创建随机数.20到60随机数
select floor(20+rand()*41);
#随机部门4-11
select floor(4+rand()*8);
#随机名称 6到24位
rand_string(floor(6+rand()*19)
#随机字符串生产,mysql定义方法
drop function if exists rand_string;
DELIMITER $$
CREATE FUNCTION `rand_string`(n INT) RETURNS varchar(255)
BEGIN
DECLARE chars_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
DECLARE return_str varchar(255) DEFAULT '';
DECLARE i INT DEFAULT 0;
WHILE i < n DO
SET return_str = concat(return_str,substring(chars_str , FLOOR(1 + RAND()*62 ),1));
SET i = i +1;
END WHILE;
RETURN return_str;
END;
$$
#随机日期 1960-2017
select concat(floor(1960+rand()*58),'-',floor(1+rand()*12),'-',floor(1+rand()*30),' 00:00:00');
#随机double小数
select round(5000+rand()*10000,2)
select if(floor(1+rand()*12)>=10) a else concat('0',a))
#部门id随机数
#董事长1个 总经理2个 副总经理6 财务部5% 人力部5% 市场部8% 销售部8% 研发部9% 质量部10% 生产一部30% 生产二部20%
select count(dept_id=1) AS ds,count() from base_emp;
#插入一条随机生产的数据
insert into base_emp(dept_id,emp_name,entry_date,salary,test_id) values(
floor(4+rand()*8),rand_string(floor(6+rand()*18)),concat(floor(1960+rand()*58),'-',floor(1+rand()*12),'-',floor(1+rand()*30),' 00:00:00'),round(5000+rand()*10000,2),floor(1+rand()*200000)
);
#存储过程使用
drop PROCEDURE if exists create_dept_id;
DELIMITER
create PROCEDURE create_dept_id(out deptId int)
begin
select count(*) from base_emp;
end
call create_dept_id(@deptId);
#删除存储过程
DROP PROCEDURE IF EXISTS proc_employee_getCount;
#创建存储过程
DELIMITER $$
CREATE PROCEDURE proc_employee_getCount(out n int)
BEGIN
SELECT COUNT(*) FROM base_emp ;
END $$
DELIMITER;
#MYSQL调用存储过程
CALL proc_employee_getCount(@n);
select @n;
#6到18个字符串
select rand_string(floor(6+rand()*18));
以上是关于性能优化之测试数据准备的主要内容,如果未能解决你的问题,请参考以下文章