博客
关于我
关系查询处理&优化
阅读量:68 次
发布时间:2019-02-26

本文共 2502 字,大约阅读时间需要 8 分钟。

关系查询处理和查询优化

还有数据库恢复(小声)

本篇文章记录了第19&20次作业


1、假设关系R(A,B)和S(B,C,D)情况如下:

R有20 000个元组,S有1 200个元组,一个块能装40个R的元组,能装30个S的元组,估算下列操作需要多少次磁盘块读写。

(1) R上没有索引,select * from R;

解答:这里是要select*,没有限定条件,就直接全表扫描一遍,需要 20000 40 = 500 \frac{20 000}{40}=500 4020000=500次 。

(2) R中A为主码,A有3层B+树索引,select * from R where A=10;

解答:3层B+树每层的元素肯定不到40。三次查找加上最后一次读写,一共需要4次读写。

(3) 嵌套循环连接R ⋈ \Join S;

解答: c o s t = B r + B r B s / ( K − 1 ) + ( F r s ∗ N r ∗ N s ) / M r s cost=Br+BrBs/(K-1)+(Frs*Nr*Ns)/Mrs cost=Br+BrBs/(K1)+(FrsNrNs)/Mrs,在这里内存缓冲区块数K和存放连接结果的块因子Mrs都不知道,故无解。

注:Br与Bs是R、S分别占用的内存块数,Frs连接选择率。

(4) 排序合并连接R ⋈ \Join S,区分R与S在B属性上已经有序和无序两种情况。

解答:有序: c o s t = B r + B s + ( F r s ∗ N r ∗ N s ) / M r s cost=Br+Bs+(Frs*Nr*Ns)/Mrs cost=Br+Bs+(FrsNrNs)/Mrs,这里Mrs和Frs都不清楚,故无法计算。

无序则需要加上对B个块文件排序的代价: ( 2 ∗ B ) + ( 2 ∗ B ∗ log ⁡ 2 B ) (2*B)+(2*B*\log_2B) (2B)+(2Blog2B),R表有500块,S表40块,分别代入得R排序代价约为11000次,S排序代价约为480次,,总共11480次。


2、对学生-课程数据库,查询信息系学生选修了的所有课程名称。
SELECT Cname	FROM Student,Course,SC	WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno AND Student.Sdept='IS';

试画出用关系代数表示的语法树,并用关系代数表达式优化算法对原始的语法树进行优化处理,画出优化后的标准语法树。

T1


3、对于下面的数据库模式

 Teacher(Tno,Tname,Tage,Tsex);

 Department(Dno,Dname,Tno);
 Work(Tno,Dno,Year,Salary).
 假设Teacher的Tno属性、Department的Dno属性以及Work的Year属性上有B+树索引,说明下列查询语句的一种较优的处理方法。

(1) select * from teacher where Tsex =‘女’;

解答:直接全表扫描。

(2) select * from department where Dno < 301;

解答:全表扫描,这里的条件是"<",且数据小。

(3) select * from work where Year <> 2000;

解答:不等于的话只能全表扫描了,毕竟只有少数的元组不用读取

(4) select * from work where year > 2000 and salary < 5000 ;

解答:利用Year的B+树索引。这里Year>2000,很容易用B+树找到。

(5) select * from work where year < 2000 or salary < 5000 ;

解答:这里使用的是OR,满足子句中一种条件就行了,应该利用全表扫描。


4、对于上题中的数据库模式,有如下的查询:
SELECT Tname	FROM Teacher,Department,Work	WHERE Teacher.Tno=Work.Tno AND Department.Dno=Work.Dno AND Department.Dname='计算机系' AND Salary>5000;

 画出语法树以及用关系代数表示的语法树,并对关系代数语法树进行优化,画出优化后的语法树。

T2


5、考虑下图所示的日志记录:

P1

(1) 如果系统故障发生在14之后,说明哪些事务需要重做,哪些事务需要回滚。

解答:T1和T3都提交了,T4还未提交,T2已回滚。故T1,T3重做,T4回滚。

(2) 如果系统故障发生在10之后,说明哪些事务需要重做,哪些事务需要回滚。

解答:T1重做,T3回滚。

(3) 如果系统故障发生在9之后,说明哪些事务需要重做,哪些事务需要回滚。

解答:T1重做,T2,T3回滚。

(4) 如果系统故障发生在7之后,说明哪些事务需要重做,哪些事务需要回滚。

解答:T1重做,T2回滚。


6、考虑题5所示的日志记录,假设开始时A、B、C的值都是0;

P1

(1) 如果系统故障发生在14之后,写出系统回复后A、B、C的值;

解答:A=8,B=7,C=11.

(2) 如果系统故障发生在12之后,写出系统回复后A、B、C的值;

解答:A=10,B=0,C=11.

(3) 如果系统故障发生在10之后,写出系统回复后A、B、C的值;

解答:A=10,B=0,C=11.

(4) 如果系统故障发生在9之后,写出系统回复后A、B、C的值;

解答:A=10,B=0,C=11.

(5) 如果系统故障发生在7之后,写出系统回复后A、B、C的值;

解答:A=10,B=0,C=11.

(6) 如果系统故障发生在5之后,写出系统回复后A、B、C的值;

解答:A=0,B=0,C=0.

 
 
 
参考文献:
[1]萨师煊,王珊,数据库系统概论.5版.北京:高等教育出版社,2014.

转载地址:http://wkfz.baihongyu.com/

你可能感兴趣的文章
multiprocessor(中)
查看>>
mysql CPU使用率过高的一次处理经历
查看>>
Multisim中555定时器使用技巧
查看>>
MySQL CRUD 数据表基础操作实战
查看>>
multisim变压器反馈式_穿过隔离栅供电:认识隔离式直流/ 直流偏置电源
查看>>
mysql csv import meets charset
查看>>
multivariate_normal TypeError: ufunc ‘add‘ output (typecode ‘O‘) could not be coerced to provided……
查看>>
MySQL DBA 数据库优化策略
查看>>
multi_index_container
查看>>
MySQL DBA 进阶知识详解
查看>>
Mura CMS processAsyncObject SQL注入漏洞复现(CVE-2024-32640)
查看>>
Mysql DBA 高级运维学习之路-DQL语句之select知识讲解
查看>>
mysql deadlock found when trying to get lock暴力解决
查看>>
MuseTalk如何生成高质量视频(使用技巧)
查看>>
mutiplemap 总结
查看>>
MySQL DELETE 表别名问题
查看>>
MySQL Error Handling in Stored Procedures---转载
查看>>
MVC 区域功能
查看>>
MySQL FEDERATED 提示
查看>>
mysql generic安装_MySQL 5.6 Generic Binary安装与配置_MySQL
查看>>