性能优化之测试数据准备

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));



以上是关于性能优化之测试数据准备的主要内容,如果未能解决你的问题,请参考以下文章

性能测试之mysql监控优化

MySQL性能测试之select&updateFunTester框架#yyds干货盘点#

PolarDB-X 全局 Binlog 解读之性能篇(上)

后端思维之数据库性能优化方案

04.SQLServer性能优化之---读写分离&数据同步

性能测试涉及知识点