MySql模拟数据测试数据库性能
2017-01-14 16:02
585 查看
我们有时需要测试一个sql语句的性能,但是如果表中数据量太小,又测不出效果。下面用存储过程来添加假数据
创建一个表,只是为了测试数据,所很多表的字段合在一起并删改了!!
-- --------------------------------------------
-- 店铺信息
-- --------------------------------------------
DROP TABLE IF EXISTS store;
CREATE TABLE store (
id int(10) auto_increment , --店铺ID
title varchar(64) , --商家名称
logo varchar(128), --商家logo
description varchar(1024) default NULL, --店铺描述(外送时间)
regTime date default NULL, --注册时间
phone varchar(64), --固定电话
mobilephone varchar(64), --移动手机
address varchar(256) , --地址
longitude double , --经度
latitude double , --纬度
commercialCircle varchar(64) default NULL, --商业圈
registerNum varchar(16), --注册号
workTime varchar(64) default NULL, --营业时间(时间段,前台封装)
businessLicenceImage varchar(256) default NULL, --营业执照照片
idCard varchar(19) , --身份证号
idCardImage varchar(64), --身份证照片(正反两张)
clickCount int(6) default 0, --浏览次数
visible tinyint(1) default 1, --是否可见
shopkeeper varchar(20), --店主
note varchar(256), --广告语
userId int(10) , --所属用户或单位
storeTypeId int(10), --所属类别
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=10000000;
写一个生成指定位数字符串的函数:
模拟一个手机号码(这里也可以写一个指定生成指定位数的整数)
-- 随机产生随进手机号码(11位)
delimiter $$
drop function rand_mobilephone $$
--这里我们又自定了一个函数
create function rand_mobilephone( )
returns bigint(11)
begin
declare i bigint default 0;
set i = 10000000000 + floor(10+rand()*10000000000);
return i;
end $$
delimiter ;
select rand_mobilephone();
-- 随机产生随进电话号码(8位)
delimiter $$
drop function rand_phone $$
--这里我们又自定了一个函数
create function rand_phone()
returns int(8)
begin
declare i int default 0;
set i = floor(10+rand()*100000000);
return i;
end $$
delimiter ;
select rand_phone();
-- 随机产生随机数(8位)
delimiter $$
drop function rand_num $$
--这里我们又自定了一个函数
create function rand_num( )
returns int(8)
begin
declare i int default 0;
set i = floor(10+rand()*100000000);
return i;
end $$
delimiter ;
select rand_num();
--根据大范围生成经度(n为大范围的经度 114--深圳)
delimiter $$
create function rand_longitude(n INT)
returns Decimal(14,11)
begin
return n+rand();
end $$
delimiter ;
--******************************************
--根据大范围生成纬度(n为大范围的经度 22--深圳)
delimiter $$
create function rand_latitude(n INT)
returns Decimal(14,12)
begin
return n+rand();
end $$
delimiter ;
创建一个表,只是为了测试数据,所很多表的字段合在一起并删改了!!
-- --------------------------------------------
-- 店铺信息
-- --------------------------------------------
DROP TABLE IF EXISTS store;
CREATE TABLE store (
id int(10) auto_increment , --店铺ID
title varchar(64) , --商家名称
logo varchar(128), --商家logo
description varchar(1024) default NULL, --店铺描述(外送时间)
regTime date default NULL, --注册时间
phone varchar(64), --固定电话
mobilephone varchar(64), --移动手机
address varchar(256) , --地址
longitude double , --经度
latitude double , --纬度
commercialCircle varchar(64) default NULL, --商业圈
registerNum varchar(16), --注册号
workTime varchar(64) default NULL, --营业时间(时间段,前台封装)
businessLicenceImage varchar(256) default NULL, --营业执照照片
idCard varchar(19) , --身份证号
idCardImage varchar(64), --身份证照片(正反两张)
clickCount int(6) default 0, --浏览次数
visible tinyint(1) default 1, --是否可见
shopkeeper varchar(20), --店主
note varchar(256), --广告语
userId int(10) , --所属用户或单位
storeTypeId int(10), --所属类别
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=10000000;
写一个生成指定位数字符串的函数:
--随机产生字符串 delimiter $$ drop function rand_string $$ --rand_string(n INT) rand_string 是函数名 (n INT) --该函数接收一个整数(返回的字符个数) create function rand_string(n INT) returns varchar(255) --该函数会返回一个字符串 begin declare chars_str varchar(100) default 'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ参加了爱和希望,你懂得,永远。'; 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()*67),1)); --随机取出一个数 set i = i + 1; end while; return return_str; end $$ delimiter ;
模拟一个手机号码(这里也可以写一个指定生成指定位数的整数)
-- 随机产生随进手机号码(11位)
delimiter $$
drop function rand_mobilephone $$
--这里我们又自定了一个函数
create function rand_mobilephone( )
returns bigint(11)
begin
declare i bigint default 0;
set i = 10000000000 + floor(10+rand()*10000000000);
return i;
end $$
delimiter ;
select rand_mobilephone();
-- 随机产生随进电话号码(8位)
delimiter $$
drop function rand_phone $$
--这里我们又自定了一个函数
create function rand_phone()
returns int(8)
begin
declare i int default 0;
set i = floor(10+rand()*100000000);
return i;
end $$
delimiter ;
select rand_phone();
-- 随机产生随机数(8位)
delimiter $$
drop function rand_num $$
--这里我们又自定了一个函数
create function rand_num( )
returns int(8)
begin
declare i int default 0;
set i = floor(10+rand()*100000000);
return i;
end $$
delimiter ;
select rand_num();
--根据大范围生成经度(n为大范围的经度 114--深圳)
delimiter $$
create function rand_longitude(n INT)
returns Decimal(14,11)
begin
return n+rand();
end $$
delimiter ;
--******************************************
--根据大范围生成纬度(n为大范围的经度 22--深圳)
delimiter $$
create function rand_latitude(n INT)
returns Decimal(14,12)
begin
return n+rand();
end $$
delimiter ;
--向store表中插入记录(海量的数据) delimiter $$ drop procedure insert_store $$ --随即添加雇员[光标] 100w create procedure insert_store(in max_num int(10)) begin declare i int default 0; --set autocommit =0 把autocommit设置成0 set autocommit = 0; repeat set i = i + 1; insert into store values(null,rand_string(20),'http://www.baidu.com/sdfdf/aaa.jpg', rand_string(100),now(),rand_phone(),rand_mobilephone(), '深圳市宝安区西乡有限公司', rand_longitude(114),rand_latitude(22),'金港华庭',rand_mobilephone(),'6:00-8:00', 'http://wwww.open.com/adf.jpg,http://www.open.com/sdf.gif','431121111111111111', 'http://localhost:8080/df/df.jpg',500,1,'xys',rand_string(50),rand_num(),rand_num()); until i = max_num end repeat; commit; end $$ delimiter ; --调用存储过程 call insert_store(1000000);
--测试数据 address: 深圳市宝安区金海路19号 latitude: 22.584639085728, longitude: 113.86655497174, --按照距离排序(比较精确) SELECT id,title, ACOS(SIN((22.584639085728 * 3.1415)/180)*SIN((latitude * 3.1415)/180)+ COS((22.584639085728 * 3.1415)/180 )*COS((latitude * 3.1415)/180)*COS((113.86655497174 *3.1415)/180- (longitude*3.1415)/180))*6380 as distance ,note FROM store order by distance ASC LIMIT 1,25 --一共25W条数据,每次计算出离目的经纬度的距离,平均时间为1s
相关文章推荐
- 性能测试新手误区(二):为什么我模拟的百万测试数据是无效的
- 测试环境下模拟真实数据库数据移植
- 性能测试新手常犯错误总结(二):为什么我模拟的百万测试数据是无效的?
- 测试数据库数据所在硬件写性能的脚本
- 【mysql】Infobright和mysql数据入库性能测试
- 数据库插入大量数据性能测试——批处理+事务VS普通插入
- PC2 1.2.0性能测试 - Mysql造数据
- jmeter 性能测试 JDBC Request (查询数据库获取数据库数据) 的使用
- python读取数据库准备性能测试账号数据
- windows :TPC-H测试的数据库模式生成及其数据导入MySQL的教程记录
- [Php-Mysql]多条数据的循环插入和一次性插入的性能测试
- Android sqlite 数据库性能测试10万条数据
- mysql---为测试数据库填充大量数据
- ORACLE异机异目录恢复-将生产数据库数据恢复到模拟测试数据库完整步骤
- 性能测试新手误区(二):为什么我模拟的百万测试数据是无效的?
- 索引--mysql 数据库Load data大量数据时性能因素之一
- MySQL数据迁移到MSSQL-以小米数据库为例-测试828W最快可达到2分11秒
- HBase 高性能获取数据(多线程批量式解决办法) + MySQL和HBase性能测试比较
- sysbench mysql 数据库性能测试
- MySQL Innodb数据库性能实践——热点数据性能