数据科学案例实训实验报告01
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据科学案例综合实训》实验指导
③执行
④查询表中数据以验证
(2)学会使用EXPLAIN命令分析查询(查询选修过所有课的学生,并展示其学号)的执行计
划,首先用两层not exists的方法实现,解释explain结果与查询的对应关系。
分析
●Nested Loop Anti Join :嵌套循环反连接
多用于!= not in 等查询;如果找到满足条件(!= not in)的不返回,不满
足条件(!= not in)的返回。和join相反。
⏹Cost :评估开始消耗。。评估总消耗
⏹Width :评估查询节点的输出行的平均字节数。
Width=4 →要查询的sno是int类型,占4个字节
⏹Rows:第一行的第二个括号里的rows=0→最后的查询结果是0条
⏹Loops:循环次数
●Filter:过滤器,在这里相当于是查询的条件
●Seq Scan:全表扫描
Seq Scan on student→对student表进行全表扫描,从头扫尾扫描一遍表里面的数据,
因为我们此时没有索引,所以只能进行全表扫描
Seq Scan on course/sc →同上
●Materialize:缓存区,将条件加入内部节点,这样扫描只需要做一次。
(3)在student表的学号、sc表的学号、sc表的课程号和course表的课程号这四个列上
分别建单列的索引。
(4)结合EXPLAIN命令分析使用索引的查询和未使用索引查询的性能区别
分析:使用索引查询,使得执行时间变短,效率更高,性能更好。
(5)使用JDBC、存储过程或SQL语句集创建一个千万行级别的表,要求该表具有主码(主
码可为int类型),且包含字符串类型、时间类型的列,并在时间类型的列上建索引,
并基于主码的范围设置10个分区。
①创建表以及分区表
②获得随机的字符串的函数
使用该自定义方法:select random_string(8) into name;
③存储过程——插入一千万条数据。name是字符型,随机;date是timestamp型
④test表里的数据以及分区表的数据
(6)分析海量表上跨分区查询与不跨分区查询的性能差别
①先建立一个千万级别的不分区的表test2
②
分析:由实验结果可以看出,跨分区查询是在表test_100000~test_8000000这几个表
进行查询的,而不跨分区查询是整张表进行全局查找。因而分区所用时间短,性能比较好。当表比较多时,分区更为细致(比如说现在是每1百万划分一个表,若是我们没50万划分一个表,也会提高查询速度)
跨分区查询能更好的缩短时间,减少代价。
(7)分析海量表上,使用分区索引与使用全局索引的性能差别
①全局索引(global)
②分区索引(local)
A)创建分区索引
B)用select * from pg_indexes; 查看全部索引
分析
使用分区索引可以减少时间
五、思考与总结
一:关于存储过程中的循环的注意事项
①要使用:=
②多层循环要用不同的循环
③自动判断选了多少课,使所有学生都选一样多的课
④可以在student表添加一个序号,这样就可以从第一个学生的学号开始插入,而不是直
接指定学号
⑤进程出现死锁要杀进程
像这样,长时间没有反应,就是因为sc表此前执行了存储过程,但这个存储过程的逻辑是有问题的,导致数据库出现了死锁问题,因此要先查出该进程的pid,
六、教师评语
成绩
签名:
日期: