关系代数表达式评估说明(DBMS)
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); // inner block Select lastname, firstname from employee where salary>c; //outer block
其中 C 代表从内部块返回的结果。
内部块的关系代数为 Ģmax(salary) (σdname=CSE(employee))
外部块的关系代数为 Πlastname, firstname(σsalary>c(employee))
查询优化器将为每个块选择一个执行或评估计划。
关系代数表达式的评估
**物化评估** - 一次评估一个操作。自下而上地评估表达式并将中间结果存储到临时文件中。
将 A ⋈ B 的结果存储到临时文件中。
将 C ⋈ D 的结果存储到临时文件中。
最后,连接存储在临时文件中的结果。
总成本 = 各个操作的成本总和 + 将中间结果写入磁盘的成本,将结果写入临时文件并将其读回的成本相当高。
**流水线评估** - 同时评估多个操作。一个操作的结果传递给下一个操作。自下而上地评估表达式,并且不将中间结果存储到临时文件中。
不将 A ⋈ B 的结果存储到临时文件中。相反,结果直接传递给与 C 的投影等等。
广告