2

供应商在数据库中实现分区时采用了哪些不同的方法?

这是对 marc_s 评论的回应:MySQL 中的分区是创建表还是仅创建虚拟表?

接受一本好书的链接形式的答案:)

4

2 回答 2

1

我只能谈论SQL Server

每个分区在内部都是一个新的 b 树。查询处理器创造了拥有一张巨大表的错觉。它几乎没有考虑到表是分区的优化,因为分区本身对优化器是透明的:列 P 上的分区表(在 (A, B) 上具有聚集索引)显示为(性能方面)具有聚类键(P,A,B)。这适用于搜索和扫描。

让分区成为一个新的内部表使对整个分区的批量操作变得容易:只需删除分区或创建一个新分区。如果架构完全相同,您甚至可以用不相关的表交换分区!(更改表切换分区)

将分区设为 b 树对维护有影响:您可以将各个分区放在不同的驱动器上,或者将它们设为只读并将它们从备份中排除

于 2012-04-05T21:10:42.597 回答
1

您可以使用以下方法模拟分区:

  • 一组以某种模式命名的表作为分区;
  • 它们之上的视图以隐藏数据存储的结构并将其呈现为单个关系;
  • 应用程序集成逻辑:让应用程序了解分区模型,从而使用正确的表来执行 DDL 语句。

这种方法已在 ORACLE 7.2 中使用(我可能对版本有误,太多年了),并且可以在任何支持视图的数据库中实现。如果视图不存在,您可以在应用程序中创建一个特殊的函数/类来模拟视图行为。

尽管如此,这是一种相当复杂且容易出错的方法,因为存储布局在数据库之外是可见的。因此,如果可能,请选择本机或隔离分区。

ORACLE 从第 8 版开始支持数据库级别的分区,使存储布局完全隐藏在数据库之外。

尽管 PostgreSQL 还没有内置的分区支持,但这是一项正在进行的工作。此外,PostgreSQL 已经拥有一组有用的特性,可以进行仅数据库分区,对任何外部用户隐藏实现。您可以在此处查看详细信息。

于 2012-04-11T07:52:30.700 回答