数据科学案例实训实验报告01

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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,

六、教师评语

成绩

签名:

日期:

相关文档
最新文档