在关系R(A1,A2,A3)和S(A2,A3,A4)上进行关系运算的4个等价的表达式E1、E2、E3和E4如下所示:
如果严格按照表达式运算顺序执行,则查询效率最高的是表达式(__)。
本题考察的是关系代数表达式的等价变换与代价优化原则。
核心原则是:尽可能将选择(σ)下推到越接近数据源越好,尽可能避免先做笛卡儿积(×),优先使用连接(⋈),并减少中间结果规模。题干四式在语义上应等价;常见等价关系为:E1 与 E2 等价(选择下推到连接两端),E3 与 E4 等价(连接转化为对笛卡儿积的选择,并尽量下推选择)。在“严格按写出的运算顺序执行”的前提下,比较中间结果规模与操作类型,E2的执行代价最低。
A选项 E1:先做连接 R ⋈ S,再整体选择 σ{A2<2018 ∧ A4='95'}。先连接后选择会产生较大的中间结果,因为连接在未过滤前参与元组更多,随后再过滤,代价高于先选择再连接,所以不是最优。
B选项 E2:先对 R 与 S 分别执行选择 σ{A2<2018} 与 σ{A4='95'},再做连接,然后投影。这是标准的“选择下推 + 再连接”策略,能显著缩小参与连接的关系规模,减少连接代价与中间结果,严格按序执行时查询效率最高,因此正确。
C选项 E3:先做笛卡儿积 R × S,再一次性做包含等值连接条件与选择条件的总选择,最后投影。笛卡儿积在未约束时会产生规模巨大的中间结果,随后再用σ过滤,代价通常最高,因此最差。
D选项 E4:先分别下推选择到 R 与 S,随后做笛卡儿积,再用 σ{R.A3=S.A3} 实现等值连接。相比 E3,已经做了部分优化(先选择),中间结果小于 E3;但仍然显式执行了笛卡儿积再过滤为连接,通常劣于直接连接的 E2,因此不是最优。
综上,按照代价最小化与中间结果最小化的优化原则,选择 B(E2)。
