解释关系代数表达式的求值(DBMS)
dbmsdatabasebig data analytics更新于 2026/1/13 2:37:17
SQL 查询被分解为查询块。一个查询块包含一个 SELECT-FROM-WHERE 表达式,以及 GROUP BY 和 HAVING 子句(如果有)。嵌套查询被拆分成单独的查询块。
示例
考虑下面给出的示例 −
Select lastname, firstname from employee where salary>(select max(salary) from employee where deptname =CSE ; C=(select max(salary) from employee where deptname=CSE); // 内部块 Select lastname, firstname from employee where salary>c; // 外部块
其中 C 表示内部块返回的结果。
内部块的关系代数为 Ģmax(salary) (σdname=CSE(employee))
外部块的关系代数为 Πlastname, firstname(σsalary>c(employee))
查询优化器随后会为每个块选择一个执行或评估计划。
关系代数表达式的评估
物化评估 − 每次评估一个操作。以自下而上的方式评估表达式,并将中间结果存储到临时文件中。

将 A ⋈ B 的结果存储在临时文件中。
将 C ⋈ D 的结果存储在临时文件中文件。
最后,将存储在临时文件中的结果连接起来。
总成本=各个操作成本之和 + 将中间结果写入磁盘的成本,将结果写入临时文件并读取回来的成本相当高。
流水线求值 − 同时求值多个操作。一个操作的结果传递给下一个操作。以自下而上的方式求值表达式,并且不要将中间结果存储在临时文件中。

不要将 A ⋈ B 的结果存储在临时文件中。而是直接将结果传递给 C 进行投影,依此类推。

