数据库原理 第九章课后作业

2.假设关系 R(A,B) 和 S(B,C,D)情况如下:R有20 000个元组,S有1200个元组,一个块能装40个R的元组,能装30个S的元组,估算下列操作需要多少次磁盘块读写。

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

没有索引

需要全表扫描

20 000/40=500 块

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

A有B+树索引,进行索引扫描, 需要 1+3=4次

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

20000/40=500 1200/30=40

以S为外表,内存分配了n

则一共需要 40+40/(n-1)*500

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

有序:500+40=540

无序:540+2*500*(log2(500)+1)+2*40*(log2(40)+1)​​​​​​

 

3.对学生课程数据库,查询信息系学生选修了的所有课程名称。中为代期I- 31053

select Cname
from Student, Course, sc
where Student Sno-SC.Sno and SC.Cno=Course.Cno and Student.Sdept = 'IS':

 

数据库原理 第九章课后作业_第1张图片

4.对于下面的数据模式

Teacher(Tno, Tname,Tage,Tsex)l

Department(Dno,Dname,Tno);

Work(Tno,Dno,Year,Salary)

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

select *from teacher where Tsex =‘女’
//通过对 Teacher 进行全表扫名,查看元组是否满足性别为女

select *from Department where Dno <301
//如果 dno <301的元组较少,可以使用索引找到dno=301的索引,然后利用B+树的顺序得到 dno<301的索引,然后再通过指针找到department中的元组;如果很多,则直接使用全表扫描

select *from work where Year <>2000
//对work进行全表扫描  找到满足 Year<>2000

select *from work where year>2000 and salary <5000
//通过 year的索引找到满足 year>2000 的元组,检查元组是否满足salary<5000

select *from work where year<2000 and salary <5000

//对work进行全表扫描  找到满足 year<2000 and salary <5000

 

5.对于题4中的数据库模式,有如下的查询

seleet Tname
from teacher, department, work
where teacher.tno = work tno and department.dno = work.dno and
department. dname = '计算机系' and salary> 5000 

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

 

 

数据库原理 第九章课后作业_第2张图片

 

 

 

 

 

 

 

 

你可能感兴趣的:(DB实验,sql)