关系查询处理&优化

关系查询处理和查询优化

还有数据库恢复(小声)
本篇文章记录了第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';

试画出用关系代数表示的语法树,并用关系代数表达式优化算法对原始的语法树进行优化处理,画出优化后的标准语法树。
关系查询处理&优化_第1张图片


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;

 画出语法树以及用关系代数表示的语法树,并对关系代数语法树进行优化,画出优化后的语法树。
关系查询处理&优化_第2张图片


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

关系查询处理&优化_第3张图片

(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;

关系查询处理&优化_第4张图片

(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.

你可能感兴趣的:(关系查询处理&优化)