供应商在数据库中实现分区时采用了哪些不同的方法?
这是对 marc_s 评论的回应:MySQL 中的分区是创建表还是仅创建虚拟表?
接受一本好书的链接形式的答案:)
我只能谈论SQL Server:
每个分区在内部都是一个新的 b 树。查询处理器创造了拥有一张巨大表的错觉。它几乎没有考虑到表是分区的优化,因为分区本身对优化器是透明的:列 P 上的分区表(在 (A, B) 上具有聚集索引)显示为(性能方面)具有聚类键(P,A,B)。这适用于搜索和扫描。
让分区成为一个新的内部表使对整个分区的批量操作变得容易:只需删除分区或创建一个新分区。如果架构完全相同,您甚至可以用不相关的表交换分区!(更改表切换分区)
将分区设为 b 树对维护有影响:您可以将各个分区放在不同的驱动器上,或者将它们设为只读并将它们从备份中排除。
您可以使用以下方法模拟分区:
这种方法已在 ORACLE 7.2 中使用(我可能对版本有误,太多年了),并且可以在任何支持视图的数据库中实现。如果视图不存在,您可以在应用程序中创建一个特殊的函数/类来模拟视图行为。
尽管如此,这是一种相当复杂且容易出错的方法,因为存储布局在数据库之外是可见的。因此,如果可能,请选择本机或隔离分区。
ORACLE 从第 8 版开始支持数据库级别的分区,使存储布局完全隐藏在数据库之外。
尽管 PostgreSQL 还没有内置的分区支持,但这是一项正在进行的工作。此外,PostgreSQL 已经拥有一组有用的特性,可以进行仅数据库分区,对任何外部用户隐藏实现。您可以在此处查看详细信息。