XII. Query Optimization
Introduction
-
基于成本的查询优化(cost-based query optimization) 具体步骤:
-
使用 等价规则(equivalence rule) 生成逻辑等价的表达式.
-
以不同方式标注结果表达式以获得不同的 查询计划(query plan).
-
选择 估计成本(estimation cost) 最低的查询计划.
-
Equivalence Rules
-
R1:合取选择可分解:.
-
R2:选择可交换:.
-
R3:连续多次投影只需要最后一个:.
-
R4:选择操作可以与笛卡尔积和 连接相结合:;.
-
R5: 连接/自然连接可交换:;.
-
R6a:自然连接可结合:.
-
R6b:设 只涉及到 和 的属性,则有 .
TBD:后面的会用到吗?
Cost Estimation
-
成本估计时不仅需考虑每个 运算符(operator) 的成本,还要考虑到中间结果的规模带来的影响.
-
符号约定:对于关系 ,
-
表示 中的元组数量.
-
表示 中单个元组的大小.
-
表示一个块中可以容纳的 的元组数量.
-
表示 中的块的数量,.
-
表示 中属性 的不同取值数量.
-
-
直方图(histogram) 可用来表示关系中每个属性的取值分布情况.
- 在一些规模估计中,可以通过直方图改进.否则一般按照均匀分布进行估计.
Estimation of Size
Size Estimation of Selections
-
:
-
一般情况:.
-
当 是 的主键时 .
-
-
(和 是对称的)
-
如果可从 catalog 中获取 和 ,则 (假设均匀分布).
-
如果缺乏统计信息,可估计为 .
-
Size Estimation of Complex Selections
-
用 中选率(selectivity) 来表示关系 中的单个元组满足 的概率.
-
合取 :.
-
析取 :.
-
否定 :.
Size Estimation of Joins
-
如果 ,则自然连接退化为笛卡尔积.,且每个元组的大小为 .
-
如果 是 的键(),则 ,因为对于 中的每个元组都可以找到 中的至多一个元组与之匹配.
-
如果 是 中引用 的外键,则 ,因为 中的每个元组都能外键的完整性保证能恰好找到一个元组与之匹配.
-
如果 不是 或 的键,则 .两种估计分别是假设 (或 )中的每个元组都能在另一个中找到若干个元组 与之匹配.
Problem: 练习卷1 T12
There are following assumptions about the table instructor and teaches:
- The number of records in
instructoris 4000. - The number of records in
teachesis 8000. - The number of distinct values of
dept_nameininstructoris 20. - The value of
salaryininstructoris between 10000 and 90000.
Please estimate the size returned by the following query:
select * from instructor natural join teaches on ID
where dept_name='CS' and salary >=70000;
(A) 25 (B) 50 (C) 100 (D) 200
Answer
C.
(*) Size Estimation of Other Operations
-
投影:
-
聚合:
-
集合操作:一般设为其上限 ,,.
-
外连接:预留未找到匹配的元组的大小 ,.
Estimation of Number of Distinct Values
TBD:有点没看懂
Choice of Evaluation Plans
Cost-Based Join-Order Selection
-
如果暴力计算,则需要考虑 种可能,情况太多.
-
可以考虑使用动态规划, 的每个子集的”基于成本的最优连接顺序选择”是确定的,只需要计算一次.
-
左深连接树(left-deep join tree):要求每个连接的右操作数都是一个关系而非中间连接的结果.
- 许多优化器只考虑左深连接树顺序,以简化情况.
Additional Optimization Techniques
Nested Subqueries
TBD
Materialized Views
-
物化视图(materialized view):每次重新计算 视图(view) 的代价很高,可以将视图的计算结果存储在磁盘上.
-
推荐使用 增量视图维护(incremental view maintenance) 的策略,每次更新后只更新变化的部分.
-
增量维护连接操作:.
-
插入:.
-
删除:.
-
-
增量维护选择操作:.
-
插入:.
-
删除:.
-
-
增量维护投影操作:需要对投影的结果进行一个计数,以确保正确的增量更新,参考下面的例子.
增量维护投影操作
, and
has a single tuple .
If we delete the tuple from , we should not delete the tuple from , but if we then delete as well, we should delete the tuple
Comments