完美吻合。 查询 5 是混合模式唯一一次获胜的情况,原因在于该查询的特性恰好在人工方面很适合混合模式的特性。具体而言,查询 5 使用了 VEHICLE、COVERAGE 和 TIME 表。COVERAGE 是一个弱实体,而且在关系模式和混合模式中,它的主键中同样具有所有 VEHICLE 标识符。因为维度模式中 VEHICLE 属性与 COVERAGE 分离,所以 COVERAGE 维度成为一个“纯”维度 — 纯的含义是,它是独立的,而且它与 VEHICLE 的任何关联都要通过事实表完成。虽然这样有利于形成适当的维度模式,但与关系模式和混合模式相比,在维度模式中,这同时也更明显地隔离了 VEHICLE 和 COVERAGE 表。
在查询 5 中,当优化程序需要使用 VEHICLE 和 COVERAGE 时,如果在维度模式中,优化程序必须重新将它们集中到一起,但是在混合模式与关系模式模式中,VEHICLE 和 COVERAGE 一同包含在 COVERAGE 表的键中,优化程序很容易即可找到它们。混合模式在优化程序需要时呈现这种结构是它的一个明确的优势,但是从另一方面来说,该优势并不普遍存在。只有在查询和模式恰好完美吻合时,这种优势才会得以体现,如在查询 5 这种情况下。
查询分析结论
我们得出结论:如果混合模式与查询的特性完美吻合,则混合模式的性能远远胜于维度模式,但是这种情况并不普遍(八例中有一例)。在大多数情况下(八例中有四例),混合计划与维度计划相同,但是可能由于动态字节太多,而使得混合模式运行速度较慢。在某些情况下(八例中有三例),混合模式的计划不同,欠优化,结果是运行时间比维度模式的运行时间长很多。
物化视图聚合
维度建模中通常使用聚合来提高性能,而创建聚合通常使用物化视图。为了演示物化视图聚合 (MVA) 在混合模式中的效果,添加了两个 MVA。表 1 显示,查询中有四个可进行查询重写以使用最右侧一列中给出的 MVA。
| 查询 | Account 维度 | Policy 维度 | Vehicle 维度 | Coverage 维度 | Time 维度 | 使用的聚合 |
| 1 | Agg | Agg | Qry/Agg | Agg_acct_pol_time | ||
| 2 | Qry | Qry | Qry | |||
| 3 | Qry/Agg | Qry/Agg | Qry/Agg | Agg_acct_pol_time | ||
| 4 | Qry/Agg | Agg | Qry/Agg | Agg_acct_pol_time | ||
| 5 | Qry | Qry | Qry | |||
| 6 | Qry/Agg | Qry/Agg | Qry/Agg | Qry/Agg | Agg_acct_pol_veh_cov | |
|
7 |
Qry | Qry | ||||
| 8 | Qry | Qry |
表 1。添加物化视图聚合以优化特定查询
“Qry”表示该查询在其 WHERE 子句中引用了此维度,“Agg”表示该 MVA 保留了对此维度的引用。如果出现重写的情况,“Qry”不会单独出现在单元格中。
MVA 引起的性能改变总体上正如预料的那样是非常积极的。同时,有利的是 MVA 使得混合模式相对于维度模式表现非常卓越,如下所示:
VENT WINNER_TIME RNR_UP_TIME LOSER_TIME ----- -------------------- -------------------- -------------------- 1. HYB = 00:00:00.941 DIM = 00:00:01.382 REL = 00:00:08.943 2. DIM = 00:00:04.246 REL = 00:00:08.041 HYB = 00:00:08.121 3. HYB = 00:00:00.942 DIM = 00:00:01.262 REL = 00:00:05.388 4. HYB = 00:00:00.120 DIM = 00:00:00.180 REL = 00:00:07.381 5. HYB = 00:00:00.290 DIM = 00:00:01.222 REL = 00:00:05.989 6. HYB = 00:00:00.731 DIM = 00:00:00.912 REL = 00:00:05.437 7. DIM = 00:00:00.691 HYB = 00:00:01.993 REL = 00:00:07.962 8. DIM = 00:00:00.511 HYB = 00:00:00.801 REL = 00:00:02.063 EVENT WINNER_OFFSET RNR_UP_OFFSET LOSER_OFFSET ----- -------------------- -------------------- -------------------- 1. HYB = 100% DIM = 147% REL = 950% 2. DIM = 100% REL = 189% HYB = 191% 3. HYB = 100% DIM = 134% REL = 572% 4. HYB = 100% DIM = 150% REL = 6151% 5. HYB = 100% DIM = 421% REL = 2065% 6. HYB = 100% DIM = 125% REL = 744% 7. DIM = 100% HYB = 288% REL = 1152% 8. DIM = 100% HYB = 157% REL = 404%
事实上,在使用聚合的所有情况(八个查询中的四个)中,混合模式的性能最好。这不但说明,使用物化视图既有利于维度模式又有利于混合模式,而且还说明,使用物化视图对混合模式总是有利的。这是一个非常重大的发现,因为它表明在混合模式上使用 MVA 能够在保持所有相关关系的同时获得所有的维度性能。
深入研究以及其他注意事项
“可以”与“应该”。如本文开篇所述,这项研究的动机是本人需要构建一个既能满足类似 OLTP 的业务需要又能满足类似 DSS 的业务需要的系统。然而,如果一个项目只需要这两种行为中的一种或者具有构建两个相互之间有馈给的独立环境的资金和时间,则最好避免采用混和设计。
人员理解。此项分析着重考虑混合设计的实施方面,而维度设计的一个重要价值是,非数据库专家人员也能很轻松地理解它。混合设计不仅不便于理解,而且其设计是所讨论的三种设计中最复杂的一种。对于要赋予高级用户对数据库的直接访问权限的系统,这是一大障碍。
其他物理优化。当前分析中没有使用分区。虽然添加并分析了位图连接索引,但结果显示这样做取得的优势并不明显(详细信息请参见代码)。应该分析这些以及其他物理优化技术,以便确定这些技术给混合设计带来的益处是否如维度设计一样多。
平台注意事项。该系统在 Windows XP 操作系统上运行,使用的是 Intel Pentium 类硬件。测试了三个此类平台。RAM 的范围是 256 MB 到 1 GB。其他平台的运行速度可能或快或慢,但是平台更改也可能改变相关模式的性能。这种可能性更可能使 Oracle 数据库软件能够检测到平台资源的状态并相应地调整计划。
