4. (6分)设T(R)表示关系R中的元组数,V(R, A)表示关系R中A属性的不同取值个数。已知关系R(a, b) 和S(b, c)的统计信息如下: T(R) = 1000, V(R, a) = 10, V(R, b) = 50 T(S) = 5000, V(S, b) = 100, V(S, c) = 500 给定如下SQL语句表示的查询: 回答下列问题: a)(2分)绘制该查询的初始逻辑查询计划(查询表达式树),并估计该查询计划的代价。 b)(2分)使⽤启发式查询优化⽅法可以对该查询进⾏哪些优化?绘制优化后的逻辑查询计 划,并估计该查询计划的代价。 c)(2分)如果⽤户频繁执⾏这种查询,每次执⾏时a的参数可能不同,那么在物理数据库设 计阶段可以⽤什么⽅法帮助提⾼这种查询的执⾏效率?
时间: 2024-02-28 17:57:47 浏览: 40
2-第二章:关系数据模型(4).pdf
a) 初始逻辑查询计划如下:
```
SELECT a, c
FROM R, S
WHERE R.b = S.b AND R.a = <value>
```
代价估计:
- T(R) = 1000,V(R, a) = 10,因此使用R的a属性索引进行访问的代价为 log10(1000) = 3
- T(S) = 5000,V(S, b) = 100,因此使用S的b属性索引进行访问的代价为 log100(5000) = 2
- 因为需要进行连接操作,因此代价为 T(R) + T(S) = 1000 + 5000 = 6000
综上,初始逻辑查询计划的代价为 3 + 2 + 6000 = 6005。
b) 启发式查询优化方法可以进行以下优化:
- 将连接操作改为使用S的c属性索引进行访问,因为连接后需要选择a和c属性,因此优化后查询计划如下:
```
SELECT a, c
FROM R, S
WHERE R.b = S.b AND S.c = <value>
```
代价估计:
- T(R) = 1000,V(R, a) = 10,因此使用R的a属性索引进行访问的代价为 log10(1000) = 3
- T(S) = 5000,V(S, b) = 100,V(S, c) = 500,因此使用S的c属性索引进行访问的代价为 log500(5000) = 2
- 因为需要进行连接操作,因此代价为 T(R) + T(S) = 1000 + 5000 = 6000
综上,优化后的逻辑查询计划的代价为 3 + 2 + 6000 = 6005。
c) 在物理数据库设计阶段,可以采用以下方法帮助提高这种查询的执行效率:
- 为R的属性a和S的属性b和c分别建立索引,以加速访问。
- 对于经常执行的查询,可以将其结果缓存起来,避免重复计算。可以使用缓存技术或者物化视图来实现。
阅读全文