2019-08-06 21:15:57 weixin_44544885 阅读数 145
  • 360度解析亚马逊AWS数据存储服务

    在基于云计算进行应用架构设计的时候,数据存储方式与传统企业应用设计有了很大的改变。一方面用户数据存储的需求随着互联网和应用服务的演变有了很大的变化,另一方面随着技术的发展我们现在有了更多的存储服务选择。经过8年多的发展,AWS云平台为用户提供了多种不同的数据存储服务。综合使用多种AWS云平台的存储服务能够帮助用户构建出一个高可用、弹性和可扩展的云计算应用。

    8717 人正在学习 去看看 方国伟

利用存储过程生成大量的测试数据;用于测试程序的查询速度和数据库检索数据的速度;下面就来看一下在mysql 中是如何一步步完成这个生成数据的过程;

先创建一个存储过程:

    点击存储过程,选择创建存储过程,然后输入存储过程名称;

 

生成一个存储过程的结构;

不同数据库创建存储过程生成的内容有点不一样;

    PROCEDURE 表名.存储过程名称

在BEGIN 和END 中写入要执行的过程(说过程有点问题,不要在意);

BEGIN              -à开始

    DECLARE a INT; -à设置参数 a ,类型为Int;

    SET a=1;       -à给参数赋值

      WHILE a<5000 DO -à循环条件,4999条数据

       INSERT INTO student(studentName) VALUES(FLOOR(RAND() * 10000));à执行SQL

      SET a=a+1;   -à给循环一个停止条件

    END WHILE;     -à结束循环

END$$              -à结束方法

Sql 是student 表的studentname 字段添加 0到10000的随机数;

 

以下产生的是符合位数的,不一定有意义,满足测试要求:

随机手机号:UNIX_TIMESTAMP()*10+floor(rand()*4000000000)

随机身份证:CONCAT('44030319',UNIX_TIMESTAMP()+FLOOR(RAND()*8000000000))

部分运行结果:

   

 

2008-10-29 13:08:00 waferleo 阅读数 1244
  • 360度解析亚马逊AWS数据存储服务

    在基于云计算进行应用架构设计的时候,数据存储方式与传统企业应用设计有了很大的改变。一方面用户数据存储的需求随着互联网和应用服务的演变有了很大的变化,另一方面随着技术的发展我们现在有了更多的存储服务选择。经过8年多的发展,AWS云平台为用户提供了多种不同的数据存储服务。综合使用多种AWS云平台的存储服务能够帮助用户构建出一个高可用、弹性和可扩展的云计算应用。

    8717 人正在学习 去看看 方国伟

用存储过程构造大批量测试数据 - MS SQL Server版:

使用存储过程,往数据库中插入大量的测试数据
做有关数据库应用程序的性能测试时,一般需要大量的测试数据,这个时候需要自动生成大量数据,可以利用存储过程来进行自动插入大量的测试数据,下面是写的一个存储过程,目的是向region_winbets_summary表中插入数据,而且4个字段要不一样,其中draw和winlevel是递增的,用while就可以实现,game_id和draw相关,region_code不是递增的,这2个字段还没想到自动生成的办法,还不够完善,先写成日志,以后进行相应的修改。如下所示:

declare @draw int
select  @draw=899
WHILE @draw>=899 and @draw<=1193
BEGIN
declare @winlevel int
select @winlevel=1
  WHILE @winlevel>=1 and @winlevel<=7
    BEGIN
     INSERT INTO region_winbets_summary (region_code,game_id,draw,seq_no,winlevel,winbets,cahbets,disbets)
     VALUES ('130100000000',3,@draw,1,@winlevel,5,0,0)
     select @winlevel=@winlevel+1
    END
select @draw=@draw+1
END

2017-12-29 13:19:29 gcxzflgl 阅读数 1449
  • 360度解析亚马逊AWS数据存储服务

    在基于云计算进行应用架构设计的时候,数据存储方式与传统企业应用设计有了很大的改变。一方面用户数据存储的需求随着互联网和应用服务的演变有了很大的变化,另一方面随着技术的发展我们现在有了更多的存储服务选择。经过8年多的发展,AWS云平台为用户提供了多种不同的数据存储服务。综合使用多种AWS云平台的存储服务能够帮助用户构建出一个高可用、弹性和可扩展的云计算应用。

    8717 人正在学习 去看看 方国伟

Mysql利用存储过程插入400W条数据

CREATE TABLE dept( /*部门表*/
 deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, /*编号*/
 dname VARCHAR(20) NOT NULL DEFAULT "",/*名称*/
 loc VARCHAR(13) NOT NULL DEFAULT "" /*地点*/
)ENGINE=MyISAM DEFAULT CHARSET=utf8;
复制代码
CREATE TABLE emp( /*EMP雇员表*/
empno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,/*编号*/
ename VARCHAR(20) NOT NULL DEFAULT "",/*名字*/
  job VARCHAR(9) NOT NULL DEFAULT "",/*工作*/
  mgr MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,/*是哪个及编号*/
  hiredate DATE NOT NULL,/*入职时间*/
  sal DECIMAL(7,2) NOT NULL,/*薪水*/
  comm DECIMAL(7,2) NOT NULL,/*红利*/
  deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 /*部门编号*/
)ENGINE=MyISAM DEFAULT CHARSET=utf8
复制代码
CREATE TABLE salgrade( /*工资级别表*/
 grade MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,
 losal DECIMAL(17,2) NOT NULL,
 hisal DECIMAL(17,2) NOT NULL
)ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO salgrade VALUES (1,700,1200);
INSERT INTO salgrade VALUES (2,1201,1400);
INSERT INTO salgrade VALUES (3,1401,2000);
INSERT INTO salgrade VALUES (4,2001,3000);
INSERT INTO salgrade VALUES (5,3001,9999);
#随机产生字符串
#定义一个新的命令结束符
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 
 '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()*52),1));
 set i = i +1;
 end while;
return return_str;
end $$
复制代码

 再来一个函数

复制代码
create function rand_num( )
returns int(5)
begin
 declare i int default 0;
 set i = floor(10+rand()*500);
return i;
 end $$
复制代码

 创建存储过程

复制代码
create procedure insert_emp(in start int(10),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 emp values ((start+i),rand_string(6),'SALESMAN',0001,curdate(),2000,400,rand_num());
until i = max_num
end repeat;
commit;
end $$
复制代码
delimiter ;

调用刚刚写好的函数,从100001号开始,产生4000000记录

call insert_emp(100001,4000000);

转载出自:https://www.cnblogs.com/wt645631686/p/6868192.html
2019-11-21 11:32:36 u012534326 阅读数 13
  • 360度解析亚马逊AWS数据存储服务

    在基于云计算进行应用架构设计的时候,数据存储方式与传统企业应用设计有了很大的改变。一方面用户数据存储的需求随着互联网和应用服务的演变有了很大的变化,另一方面随着技术的发展我们现在有了更多的存储服务选择。经过8年多的发展,AWS云平台为用户提供了多种不同的数据存储服务。综合使用多种AWS云平台的存储服务能够帮助用户构建出一个高可用、弹性和可扩展的云计算应用。

    8717 人正在学习 去看看 方国伟

说明

在平时的开发工作中经常需要创建大量的测试数据,手动插入显然不现实。这个时候我们就需要使用存储过程来为我们批量插入数据,这里简单介绍一下存储过程的例子。

示例表

CREATE TABLE `z_generate` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) COLLATE utf8mb4_bin DEFAULT NULL,
  `gmt_create` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

存储过程函数

/**
 * 加 // 代表默认情况下,不可能等到用户把这些语句全部输入完之后,再执行整段语句。
 * 因为mysql一遇到分号,它就要自动执行。 即,在语句RETURN '';时,mysql解释器就要执行了。
 * 这种情况下,就需要事先把delimiter换成其它符号,如//或$$
 */
delimiter //
/**创建存储过程**/
create procedure generator()
/**方法开始固定语法**/
begin
  /**定义变量**/
  declare i int;
  declare originName varchar(50);
  declare targetName varchar(50);
  declare gmtCreate timestamp;

  set i = 0;
  set originName = '蕾欧娜';
  while i < 100 DO
  set i = i + 1;
  set targetName = concat(originName, i);
  set gmtCreate = date_add(curdate(), interval i day);
  insert into z_generate(`name`, `gmt_create`) values (targetName, gmtCreate);
  end while;
end;
//
/**执行存储过程**/
call generator()
2019-03-22 17:12:26 zhaihuilin0986 阅读数 27
  • 360度解析亚马逊AWS数据存储服务

    在基于云计算进行应用架构设计的时候,数据存储方式与传统企业应用设计有了很大的改变。一方面用户数据存储的需求随着互联网和应用服务的演变有了很大的变化,另一方面随着技术的发展我们现在有了更多的存储服务选择。经过8年多的发展,AWS云平台为用户提供了多种不同的数据存储服务。综合使用多种AWS云平台的存储服务能够帮助用户构建出一个高可用、弹性和可扩展的云计算应用。

    8717 人正在学习 去看看 方国伟

今天利用闲暇时间想学习一些sql 的优化方法,我老早就讲 表都建好了,但是数据是一个问题呀。我需要大量的数据,我想到了可以通过硬编码的格式进行插入,但是我又不想写代码。我就想到另一个方案:存储过程和函数

由于以前我也很少写这些东西,今天我就认证的研究一下存储过程和函数的神奇地方。 吐槽完了!我们开始上枪开干....

【备注:首先检查下我们的数据库是否支持函数】

若是你的不支持可以执行

set global log_bin_trust_function_creators=1;

一。首先创建三张表 

学生表 student

科目表  course

学生成绩表 sc

这里我就不展示了

二。编写函数

(1).编写一个随机生成字符串的函数:

delimiter $$
 create function rand_string(n int) returns varchar(255)
 begin
   declare chars_str varchar(100) default 'qwertyuiopasdfghjklzxcvbnm';
   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()*52),1));
   set i=i+1;
   end while;
   return return_str;
 end $$

(2.)随机生成编号的函数

delimiter $$
 create function rand_num() returns int(5)
 begin
   declare i int default 0;
   set i=floor(rand()*10);
 return i;
 end $$

 创建完后我们可以查看创建的函数:

   SHOW FUNCTION STATUS

可以看到我们创建的两个函数

三。编写存储过程

(1)学生表

delimiter $$
CREATE PROCEDURE INSERT_student(in START INT(10) ,in max_num INT(10) )
BEGIN
    DECLARE i int DEFAULT 1;
    SET autocommit = 0;  /*把autocommit设置成0*/
    REPEAT
    SET i=i+1;
    INSERT INTO student(id,NAME) VALUES( (START+i), rand_string(6) );
    UNTIL i=max_num 
    END REPEAT;
    COMMIT;
END $$

(2)科目表

delimiter $$
CREATE PROCEDURE INSERT_course(in START INT(10) ,in max_num INT(10) )
BEGIN
    DECLARE i int DEFAULT 1;
    SET autocommit = 0;  /*把autocommit设置成0*/
    REPEAT
    SET i=i+1;
    INSERT INTO course(c_id,NAME) VALUES( (START+i), '语文' );
    UNTIL i=max_num 
    END REPEAT;
    COMMIT;
END $$

(3).成绩表

delimiter $$
CREATE PROCEDURE INSERT_sc(in START INT(10) ,in max_num INT(10) )
BEGIN
    DECLARE i int DEFAULT 1;
    SET autocommit = 0;  /*把autocommit设置成0*/
    REPEAT
    SET i=i+1;
    INSERT INTO sc(sc_id,s_id,c_id,score) VALUES( (START+i), rand_num(),rand_num(),rand_num()  );
    UNTIL i=max_num 
    END REPEAT;
    COMMIT;
END $$

查看存储过程

SHOW CREATE PROCEDURE INSERT_student;
SHOW CREATE PROCEDURE INSERT_course
SHOW CREATE PROCEDURE INSERT_sc;

四。调用存储过程

CALL INSERT_student(1,100) 

CALL INSERT_sc(1,1000)

call INSERT_course(1,1000)

添加相应的数据

删除存储过程

drop    PROCEDURE  存储过程名称

五。数据查询优化

查询科目为语文的并且成绩是107 的数据

SELECT * FROM student s WHERE s.id in(

SELECT sc.s_id from sc sc WHERE sc.c_id =0 AND sc.score =107 )

没建立索引之前需要 0.9多分钟

发现没有用到索引,type全是ALL,那么首先想到的就是建立一个索引,建立索引的字段当然是在where条件的字段了。

先给sc表的c_id和score建个索引

CREATE index sc_c_id_index on SC(c_id);

CREATE index sc_score_index on SC(score);

然后我就建立索引了

建立索引后可以看到 type 不是 All

查询的速度是 0.0004秒

我觉得还不够快,又改

SELECT * FROM student s INNER JOIN sc  sc ON s.id = sc.s_id WHERE sc.c_id =0 and sc.score=107

又改成  先where 后再 join 

正常情况下是先join再进行where过滤,但是我们这里的情况,如果先join,将会有70w条数据发送join,因此先执行where过滤是明智方案,现在为了排除mysql的查询优化

总结:

  • mysql嵌套子查询效率确实比较低

  • 可以将其优化成连接查询

  • 连接表时,可以先用where条件对表进行过滤,然后做表连接
    (虽然mysql会对连表语句做优化)

  • 建立合适的索引,必要时建立多列联合索引

  • 学会分析sql执行计划,mysql会对sql进行优化,所以分析执行计划很重要

索引优化

上面讲到子查询的优化,以及如何建立索引,而且在多个字段索引时,分别对字段建立了单个索引

后面发现其实建立联合索引效率会更高,尤其是在数据量较大,单个列区分度不高的情况下。

单列索引

多列索引

 

 

 

 

本文重点还是存储过程和 函数 实现批量添加!

 

 

 

 

 

 

 

 

 

 

 

 

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