Emp(eid, integer, sal, integer, age, real, did integer) Dept(did, integer, projid, integer, budgett real, status char(1o)) Proj(projid: integer, code integer, report: varchar)假设关系Emp的记录长20个字节,Dept记录长40个字节,Proj记录平均长2000字节。关系Emp有20000个元组,Dept有5000个元组(注意属性域dd并不是关系的码),Proj有1000个元组。每个部门由did确定,对应于10个项目。文件系统支持4000字节的数据页,可用的缓冲区页有12个。根据这些信息回答下面的问题。假定属性值是均匀分布的。如果需要的话,请说明你所做的其他假设。以读写的数据页数目计算开销,并且忽略写出最终结果的开销。
(1)考虑下面的两个查询:“查询年龄为30的所有雇员”和“查询项目号code=20的所有项目”。假设这两个查询满足条件的元组数目是相同的。如果正在为选择条件涉及的属性域创建索引以加速查询的求解,对哪一个查询来说聚簇索引(与非聚簇索引比较)更加重要?
(2)考虑下面的查询:“查询年龄大于30的所有雇员”。假设在属性域age上存在非聚簇索引。设满足条件的元组数目为N。对哪些N值,顺序扫描的方法比采用索引的开销要小?
(3)考虑下面的查询:
(b)假设两个关系在连接属性域上有序。列出优化器考虑的所有执行计划,并确定最小开销的执行计划。
(c)假设关系Emp的属性域dd上存在聚簇B+树索引,关系Dept在属性域did上有序。列出优化器考虑的所有执行计划,并确定最小开销的执行计划。
(4)考虑下面的查询
(b)如果在属性域 P. provid上存在哈希索引,确定最小开销的执行计划
(c)如果在属性域D. provid上存在哈希索引,确定最小开销的执行计划
(d)如果在属性域D. provid和P. provid上存在哈希索引,确定最小开销的执行计划
(e)假设在属性域D.did上存在聚簇的B+树索引,在属性域P. provid上存在哈希索引,确定最小开销的执行计划。
(f)假设在属性域D.did上存在聚簇的B+树索引,在属性域D. provid上存在哈希素引,在属性域P. provid上存在哈希索引,确定最小开销的执行计划
(g)假设在属性域<D.did,D. provid>上存在聚簇的B+树索引,在属性域P. provid上存在哈希索引,确定最小开销的执行计划。
(h)假设在属性域<D. provid,D.did>上存在聚簇的B+树索引,在属性域P. provid上存在哈希索引,确定最小开销的执行计划。
(5)考虑下面的查询:
(a)假设没有可用的索引。确定最小开销的执行计划
(b)如果在属性域 P. provid上存在哈希索引,确定最小开销的执行计划
(c)如果在属性域D. budget上存在哈希索引,确定最小开销的执行计划
(d)如果在属性域D. provid和D. budget上存在哈希索引,确定最小开销的执行计划。
(e)假设在属性域<D.did,D. budget>上存在聚簇的B+树索引,在属性域Pprovid上存在哈希索引,确定最小开销的执行计划。
(f)假设在属性域D.dd上存在聚簇的B+树索引,在属性域D. budget上存在哈希索引,在属性域P. provid上存在哈希索引,确定最小开销的执行计划。
(g)假设在属性域<D.did,D. budget,D. provid>上存在聚簇的B+树索引,在属性域P. provid上存在哈希索引,确定最小开销的执行计划。
(h)假设在属性域<D.did,D. provid,D. budget>上存在聚簇的B+树索引,在属性域P. provid上存在哈希索引确定最小开销的执行计划
(6)考虑下面的查询:
(a)列出优化器考虑的所有单关系,两个关系和三个关系的执行计划。
(b)确定查询的最小开销的执行计划。
(c)如果关系Proj上的索引是非聚簇的,该执行计划的开销会改变很大吗?如果关系Emp或者Dept上的索引是非聚簇的,情况又如何呢
SELECT. FROMEmp E, Dept D Where E did= D, did(a)假设关系Emp的属性域did上存在聚簇哈希索引。列出优化器考虑的所有执行计划,并确定最小开销的执行计划。
(b)假设两个关系在连接属性域上有序。列出优化器考虑的所有执行计划,并确定最小开销的执行计划。
(c)假设关系Emp的属性域dd上存在聚簇B+树索引,关系Dept在属性域did上有序。列出优化器考虑的所有执行计划,并确定最小开销的执行计划。
(4)考虑下面的查询
SELECT D, did. COUNT(* ROM Dept D, Proj P WHERE D. projid- P. projid GROUP BY D did(a)假设没有可用的索引。确定最小开销的执行计划。
(b)如果在属性域 P. provid上存在哈希索引,确定最小开销的执行计划
(c)如果在属性域D. provid上存在哈希索引,确定最小开销的执行计划
(d)如果在属性域D. provid和P. provid上存在哈希索引,确定最小开销的执行计划
(e)假设在属性域D.did上存在聚簇的B+树索引,在属性域P. provid上存在哈希索引,确定最小开销的执行计划。
(f)假设在属性域D.did上存在聚簇的B+树索引,在属性域D. provid上存在哈希素引,在属性域P. provid上存在哈希索引,确定最小开销的执行计划
(g)假设在属性域<D.did,D. provid>上存在聚簇的B+树索引,在属性域P. provid上存在哈希索引,确定最小开销的执行计划。
(h)假设在属性域<D. provid,D.did>上存在聚簇的B+树索引,在属性域P. provid上存在哈希索引,确定最小开销的执行计划。
(5)考虑下面的查询:
SELECT D, did. COUNT(.) FROMDept D, Proj P WHERE D. projid P. projid AND D, budget >>99000 GROUP BY D did假设部门的预算平均分布在0~100000的范围中。
(a)假设没有可用的索引。确定最小开销的执行计划
(b)如果在属性域 P. provid上存在哈希索引,确定最小开销的执行计划
(c)如果在属性域D. budget上存在哈希索引,确定最小开销的执行计划
(d)如果在属性域D. provid和D. budget上存在哈希索引,确定最小开销的执行计划。
(e)假设在属性域<D.did,D. budget>上存在聚簇的B+树索引,在属性域Pprovid上存在哈希索引,确定最小开销的执行计划。
(f)假设在属性域D.dd上存在聚簇的B+树索引,在属性域D. budget上存在哈希索引,在属性域P. provid上存在哈希索引,确定最小开销的执行计划。
(g)假设在属性域<D.did,D. budget,D. provid>上存在聚簇的B+树索引,在属性域P. provid上存在哈希索引,确定最小开销的执行计划。
(h)假设在属性域<D.did,D. provid,D. budget>上存在聚簇的B+树索引,在属性域P. provid上存在哈希索引确定最小开销的执行计划
(6)考虑下面的查询:
SELECT E. eid, D did, P. projid FROM Emp E, Dept D, Proj P WHERE E, sal e 50 000 AND D budget> 20 000 AND E did= D did AND D. projid= P. projid假设雇员的工资平均分布在10009~10008的范围中,项目预算平均分布在100030000的范围中。关系Emp的属性域sal,Dept的属性域did以及Proj的属性域 provid上分别存在聚簇的索引。
(a)列出优化器考虑的所有单关系,两个关系和三个关系的执行计划。
(b)确定查询的最小开销的执行计划。
(c)如果关系Proj上的索引是非聚簇的,该执行计划的开销会改变很大吗?如果关系Emp或者Dept上的索引是非聚簇的,情况又如何呢