MYSQL 千万测试数据

下班自行车的路上 脑袋里突然蹦出来一个 面试官老是问 问数据库数据太多怎么优化

死搬硬套:

1.优化查询语句

2.使用索引

3.分区表

4.硬件升级

那么真实的情况到底是怎么样的 想弄着玩玩 亲身体会一下 叫做“纸上得来终觉浅,绝知此事要躬行” 奈斯 说搞就搞 

查资料 测试 这里是在csdn上借鉴这篇文章的sql语句 毕竟让我自己写 一时半会也写不出来 就所想之处 玩就是了
 MYSQL用存储过程创建百万级测试数据表_www520507的专栏-CSDN博客

1.2.3.4.5.6. 全部复制 分开选中右键数据库中分开执行 

(可以尝试一下全部执行)理论上是不应该有问题的 但是我是分开执行的sql的 

不足:插入数据太慢 还有教程好像也是存储过程 提高查询速度的 最短50s100万数据插入完成

这个差不多是一个入门级别的 缺点就是插入数据的速度太慢了 就

 现在还没好 有点迫不及待想看到百万级别的数据库是什么样子的了

到底呀 到底 强迫症的我想看看执行这个存储过程到底需要多久的时间

 差不多23分钟了 我淦

#1.创建随机字符串函数,便于创建名称

DROP function if EXISTS rand_string;
#创建一个指定字符个数的函数
create function rand_string(n INT)
#返回字符串,注意:此处关键字是returns 而不是return
returns varchar(255)
BEGIN
    #定义一个临时变量,给变量赋值'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
    DECLARE chars_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    # 定义返回结果字符串
    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.创建随机编号生成函数
drop function if exists rand_num;
CREATE function rand_num()
returns int(5)
BEGIN
	DECLARE i int default 0;
	set i = FLOOR(10+RAND()*500);
	return i;
END


#3.创建数据表 -- 部门表 dept
drop table if EXISTS dept;
create table dept (
	deptno MEDIUMINT UNSIGNED not null DEFAULT 0,
  dname varchar(20) default '',
	ioc varchar(13) default''
) ENGINE = myisam default CHARSET ='utf8';
ALTER table dept add PRIMARY key(deptno);


#4.创建数据表 -- 员工表 emp
drop table if EXISTS emp;
CREATE TABLE `emp` (
  `empno` mediumint(8) unsigned NOT NULL DEFAULT '0',
  `ename` varchar(20) NOT NULL DEFAULT '',
  `job` varchar(9) NOT NULL DEFAULT '',
  `mgr` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '上级编号',
  `hiredate` date NOT NULL COMMENT '入职日期',
  `salary` decimal(7,2) NOT NULL COMMENT '薪水',
  `comm` decimal(7,2) NOT NULL COMMENT '红利',
  `deptno` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '部门编号'
) ENGINE=MYISAM DEFAULT CHARSET=utf8;


#5.插入测试数据
drop PROCEDURE IF EXISTS insert_emp ;
 
CREATE PROCEDURE insert_emp (in start_no int(10),in max_num int(10))
 
BEGIN
	DECLARE i int default 0;
	# 设置自动提交为false
	set autocommit =0;
	# 开启循环
	REPEAT
		set i = i+1;
		insert into emp values((start_no+i),rand_string(6),'SALESMAN',0001,CURDATE(),rand_num(),400,0002);
	
	UNTIL i=max_num
	END REPEAT;
END

#6.调用存储过程,生成百万数据
call insert_emp(10000,10000000);





 

 干的漂亮 

试一下使用条件查询会不会好一点

 牛呀牛

今日还有别的事情 欲知后事如何 请听下回分享 2021年11月3日20:20:08

おすすめ

転載: blog.csdn.net/nanyangnongye/article/details/121129189