在关系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)。
