1.假设关系R(A,B)和S(B、C、D)情况如下:R有20000个元组,S有1200个元组,一个块能装40个R的元组,能装30个S的元组,估算下列操作需要多少次磁盘块读写。
(1)R上没有索引
select * from R;
R有20000个元组,一个块能装40个R的元组,所以20000/40=500块
(2)R中A为主码,A有3层B+树索引
select*from R where A=10;
高度每下降一级,即读取一次磁盘,加上该元组所在的一块,3+1=4次
B数、B+树及在数据库索引中应用:https://blog.csdn.net/jiangshangchunjiezi/article/details/88362873
(3)嵌套循环连接
R
⋈
S
R \Join S
R⋈S
没有给出连接操作使用的内存缓冲区块数K,所以无法确定
设在内存中存放X块R元组和Y块S元组
读R表块数+读C表遍数每遍块数
W1=20000/40+[20000/(40X)][1200/(30Y)]
连接后的元组数为1200。设每块能装Z个元组,则写出W2=1200/Z块。
W1+W2
(4)排序合并连接
R
⋈
S
R \Join S
R⋈S,区分R与S在B属性上已经有序和无序两种情况。
R和S只读取一遍,20000/40+1200/30=540,
未排序相对于排好序的要加上排序代价
2.对学生-课程数据库,查询信息系学生选修了的所有课程名称。
SELECT Cname
FROM Student,Course,SC
WHERE Stdent.Sno=SC.Sno AND SC.Cno=Course.Cno AND Student.Sdept='IS'
试画出用关系代数表示的语法树,并用关系代数表达式优化算法对原始的语法树进行优化处理,画出优化后的标准语法树。
查询树
关系代数表示的语法树
优化后的标准语法树
3.对于下面的数据库模式
Teacher(Tno,Tname,Tage, Tsex);
Department (Dno, Dname, Tno);
Work (Tn, Dno,Year, Salary)
假设Teacher的Tno属性、Dcpartment的Dno属性以及Work的Year属性上有B+树索引,说明下列查询语句的一种较优的处理方法。
(1)
select *from teacber where Tsex='女'
全表扫描算法
(2)
select *from departmcnt where Dno<301
全表扫描算法
(3)
select *from work where Year <>2000
全表扫描算法
(4)
select *from work where year > 2000 and salary<5000
索引扫描算法-B+树索引
(5)
select *from work where year<2000 or salary<5000
全表扫描算法
4.对于题3中的数据库模式,有如下的查询:
select Tname
from teacher,department,work
where teacher.tno=work.tno and department.dno=work.dno and
dcpartment.dname='计算机系' and salary>5000
画出语法树以及用关系代数表示的语法树,并对关系代数语法树进行优化,画出优化后的语法树.
查询树
关系代数表示的语法树
优化后的语法树
总结:大概三个半小时多,主要用在第一题,其实上课没听懂。后来做题又回去琢磨了半天,网上找不到答案,不知道对不对,等老师放答案。后面的图觉得还挺好理解的。