百万数据添加
现在有个测试项目,测试加缓存和不加缓存访问列表接口,性能的提升程度。测试之前需要有100万条数据进行测试,数据字典如下
user表
`id` 自增id
`account` 邮箱
`name` 姓名
`create_time` 创建时间
1. 在mysql命令行,手写DLL创建表结构。
create table user(
id int primary key auto_increment,
account varchar(11) ,
name varchar(50),
create_time timestamp)engine=InnoDB;
2. 使用php脚本向数据库中use表批量插入100万数据,数据库操作必须使用pdo。
(1)account必须是邮箱地址,不能重复,并且唯一
(2)name 必须是大于11位的英文随机字符串,一样不得分
(3)desc 必须是大于20位英文随机字符串,一样不得分
如果有报错
插入百万数据报错,减少一下插入的数据数量,for循环内的变量记得赋值为空,否则字符过长,无法插入
//使用pdo插入百万条数据
$dbh = new PDO('mysql:host=127.0.0.1;dbname=1803A', "root", "root");//家里与mysql的连接并选择数据库
//设置连接的字符集
$dbh->exec('set names uft8');//exe执行增删改非查询语句
$sql=" insert into user values";
$str="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
$end= strlen($str)-1;//字符串最后一位元素的下标
for($i=0;$i<=100000;$i++){
$account="";//在for循环中给变量空值
$name="";//在for中给name赋值为空
$desc="";//描述
for($x=0;$x<=10;$x++){
$account.=$str[rand(0,$end)];
}
$account.=$account."@qq.com";
for($j=0;$j<11;$j++){
//在php中.代表的是字符串拼接
$name.=$str[rand(0,$end)];//随机参数一个0-51之间的数字 字符串长度52 长度-1 是字符串最高位的下标
}
for($z=0;$z<=20;$z++){
$desc.=$str[rand(0,$end)];
}
$sql.="(null,'$account','$name',null,'$desc'),";
}
$sql=substr($sql,0,-1);//截取出最后一个逗号
$res=$dbh->exec($sql);
echo $res;
注意点:
数据表设计的字段长度
报错1:
报错2:
4. 使用count统计出数据
select count(*) from user;
5. 开启慢日志,设置慢查询时间为1s,必须截图。
set slow_query_log=on;
set long_query_time=0.1;
set slow_query_log_file='C:\\a.txt';
第一行开启慢查, 第二行 设计慢查的时间 ,第三行设置慢查的文件路径
6. 使用select account from user order by account desc查询数据库,并且找到慢日志,利用Explain工具对上面sql进行分析,并且优化,优化前和优化后的时间进行对比截图。(20分)
(1) 运行sql,并且找到慢查询日志,必须截图。
查询慢查
show variables like '%query%';
(2) 利用explain进行分析,必须截图。
EXPLAIN select account from user order by account desc
(3) 对该查询进行优化,优化前和优化后进行对比,必须截图。【添加索引】
没有添加前状态
添加索引后的状态
功能分析
没有创建索引的时候
使用普通索引后的效果
相差0.075秒 索引创建索引可以提高查询sql语句的速度
功能代码在运行的时候,发现某个查询的代码总是笔记慢,开启慢查,找到哪个一个sql语句运行慢,分析这个sql语句,创建索引

浙公网安备 33010602011771号