不同的SQL供应商如何进行分区?

不同的SQL供应商如何进行分区?,sql,database-partitioning,Sql,Database Partitioning,供应商在数据库中实现分区时采用的不同方法有哪些 以下是对marc_评论的回应: 以一本好书的链接形式给出的答案已被接受:)我只能谈论SQL Server: 每个分区在内部都是一个新的b-树。查询处理器制造了一个拥有一个巨大表的假象。它几乎没有考虑到表被分区的优化,因为分区本身对优化器基本上是透明的:列P上的分区表(聚集索引在(A,B)上)显示为(性能方面)具有聚集键(P,A,B)的单个表。搜索和扫描也是如此 将分区作为一个新的内部表使整个分区的批量操作变得容易:只需删除分区或创建一个新分区。如果

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

以下是对marc_评论的回应:


以一本好书的链接形式给出的答案已被接受:)

我只能谈论SQL Server

每个分区在内部都是一个新的b-树。查询处理器制造了一个拥有一个巨大表的假象。它几乎没有考虑到表被分区的优化,因为分区本身对优化器基本上是透明的:列P上的分区表(聚集索引在(A,B)上)显示为(性能方面)具有聚集键(P,A,B)的单个表。搜索和扫描也是如此

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


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

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

  • 一组以某种模式命名为分区的表
  • 它们上面的一个视图,用于隐藏数据存储的结构,并将其显示为单个关系
  • 应用程序集成逻辑:使应用程序了解分区模型,从而使用正确的表来执行DDL语句
这种方法已经在Oracle7.2中使用过(我可能对这个版本有错误,太多年了),并且可以在任何支持视图的数据库中实现。如果视图不存在,您可以在应用程序中创建一个特殊的函数/类来模拟视图行为

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

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


尽管PostgreSQL还没有内置的分区支持,但这是一个很好的解决方案。此外,PostgreSQL已经有了一组有用的特性,使得只对数据库进行分区成为可能,从而对任何外部用户隐藏实现。您可以查看详细信息。

对于投票否决/选择投票关闭的人:如果每个供应商采用不同的方法进行分区,那么为什么这不是一个有效的问题?不是我:-)只是想理解。也许这并不是一个不合理的问题;首先,这是一个与编程无关的边缘问题(这实际上更多的是一个数据库体系结构问题-->在dba.stackexchange.com上过得更好),其次,这是一个相当广泛的问题-你可以就这个主题写整本书!也许这就是为什么有人认为这个问题过于宽泛site@marc_s-编辑问题,以允许包含书籍:)