MySql模拟数据测试数据库性能

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/curiouslearnerdhh/article/details/54427004

我们有时需要测试一个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;


写一个生成指定位数字符串的函数:
--随机产生字符串
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


展开阅读全文

SPARK难道比ORACLE性能还差?百万级数据测试性能

11-29

本人对大数据方面也是刚刚研究,由于工作需要在实时查询与统计的性能方面要深入学习。现测试性能如下:rn rn环境:VirtualBox host-onlyrnubuntu版本: Linux master 4.4.0-47-generic #68-Ubuntu SMP Wed Oct 26 19:39:52 UTC 2016 x86_64 x86_64 x86_64 GNU/Linuxrn rnXXX.XXX.XXX.101  masterrnXXX.XXX.XXX.102  Slave1rnXXX.XXX.XXX.103  Slave2rnXXX.XXX.XXX.104  Client1rnXXX.XXX.XXX.1    HOST   数据库安装于宿主机器内rn rn在master中start-all 成功启动后。slave1与Slave2 Work启动成功。rn在Client机器中启动 spark-shell --master spark://master:7077 --jars ../lib/ojdbc6.jar 启动成功 执行下面的指令rn rnval url = "jdbc:oracle:thin:@XXX.XXX.XXX.1:1521:orcl" val tableName = "mytables" val prop = new java.util.Properties prop.setProperty("user","test") prop.setProperty("password","test")rnprop.setProperty("driver","oracle.jdbc.driver.OracleDriver")rnval predicates = Array( "2013-01-01" -> "2014-01-01", "2014-01-01" -> "2015-01-01", "2015-01-01" -> "2016-01-01",rn"2016-01-01" -> "2017-01-01" ).map case (start, end) => s" indbtime>= to_date('$start','yyyy-mm-dd') " + s" AND indbtime<= to_date( '$end','yyyy-mm-dd')" rnval jdbcDF = sqlContext.read.jdbc(url,tableName,predicates,prop)rn rn rnscala> jdbcDF.count()rn16/11/29 17:19:49 INFO DAGScheduler: Job 0 finished: count at :30, took 41.144126 srnres4: Long = 1441039rn rn rn结论:rn[color=#FF0000]1441039的数据耗时要41秒,而在数据库里直接用select count(*) from tables ,不到一秒就返回结果。rn我知道集群的spark应该会比单机的oracle功能更强大,请高手指点,哪儿出的问题?rn rn对数据库表里上亿条的数据各种组合条件与统计字段交叉,要求10秒内返回结果,请问大牛们,如何实现??rn大数据初学,问题有些低级,望专业人士不要见笑。[/color] 论坛

没有更多推荐了,返回首页