比较分区表和分区视图
分区视图在 SQL Server 2005 中仍然可用,仍可以作为在数据仓库中进行分区时的一项较好的选择。大多数情况下,分区表将更易于管理。下表概要列出了两种方法的优、缺点:
表 1:SQL Server 2005 分区表与分区视图
功能 | 分区表 | 分区视图 |
表的维护 | 表作为单个实体来管理。 | 每个参与的表各自都是一个实体,必须对其进行元数据更改。 |
索引 | 每个分区必须具有相同的索引。 | 每个表可以具有各自的索引策略。 |
实现 | 两者在实现的复杂程度方面大致相同。发生问题时,分区表会更明确地引发错误。 | 可能会存在隐蔽的问题使分区视图无法按预期进行操作。一个常见问题是创建检查约束而没有检查当前值。分区视图能够成功实现,但由于不明原因而不能正确进行优化。 |
编译时间 | 由于所有分区的索引方式都一样,因此优化器可以对每个分区使用相同的执行计划,从而使编译时间大大缩短。 | 由于分区可以具有不同的索引,因此优化器必须针对每个表(分区)来估计最佳执行计划。当分区视图中存在很多表时,编译时间将会很长。 |
加载 | 可以从外部加载分区,从而将对表当前用户的影响降至最低。 | 可以从外部加载表,从而将对视图当前用户的影响降至最低。 |
切换入新数据 | 是一种快捷的元数据操作,将自然进行排队。 | 是一种元数据操作,但是 ALTER VIEW 语句会无限期地等待 SCHEMA 锁。 |
可更新性 | 除了创建分区表所需的规则以外,不必遵守其他特殊规则来使该表可更新。分区表可以具有标识列,不需要主键等。 | 存在一些使得分区视图难以具备可更新性的限制,例如参与的表没有标识列并且存在主键。这通常意味着必须直接更新基础表,这样就使得 INSERT 和 UPDATE 的编码复杂化。 |
备份/还原 | 可以单独或一起备份/还原表的分区,具体取决于文件组的实现方案。 | 可以单独或一起备份/还原构成分区视图的各个表,具体取决于文件组的实现方案。 |
数据库内容 | 一个分区表中的所有分区必须驻留在同一个数据库中。 | 参与分区视图的各个表可以驻留在不同的数据库中。这就使得对历史记录段的备份和还原操作非常容易实现。 |
查询并行处理 | 在并行查询计划中,各个分区是并行处理的单元。如果查询仅涉及单个分区,将不通过并行处理访问该表。 | 将单独考察分区视图中的每个表,以确定是否进行并行查询访问。如果查询仅涉及单个表,则可以通过并行处理访问该表。 |
批量加载 | 分区表可以直接作为批量插入/备份操作的目标。 | 分区视图不能作为批量插入/备份操作的目标 – 目标必须是视图中的各个表。 |