关于表分区
Apache Cloudberry 允许您通过表分区将大型表逻辑地划分为更小、更易于管理的部分。这可以显著提高查询性能,因为查询优化器可以只扫描必要的数据,而不是整个表。分区是一种逻辑划分;它不会改变表数据在段上的物理分布。
有关如何创建和管理分区表,请参阅创建和管理分区表。
为什么使用表分区
分区可以提供多项优势,特别是对于超大型表(例如,超出数据库服务器物理内存的表):
- 提高查询性能:当大部分频繁访问的行位于单个分区或少量分区中时,查询运行速度会快得多。分区就像索引的更高层级,使得索引的关键部分更可能驻留在内存中。
- 高效扫描:当查询或更新访问单个分区的很大一部分时,对该分区的顺序扫描可能比使用索引更高效,因为使用索引会涉及对整个表的随机访问读取。
- 更快的数据管理:通过添加或删除分区,可以快速执行批量加载和删除操作。
DROP TABLE
分区或ALTER TABLE DETACH PARTITION
等操作比批量DELETE
操作快得多,并且避免了VACUUM
的开销。 - 数据分层:通过管理分区,可以将很少使用的数据迁移到更便宜、更慢的存储介质。
分区方法
Apache Cloudberry 支持以下表分区方法:
- 范围分区:表被划分为由一个或多个键列定义的“范围”。分配给不同分区的值范围之间没有重叠。例如,您可以按日期范围或业务对象标识符范围进行分区。每个范围的下限是包含的,上限是独占的。
- 列表分区:表通过明确列出每个分区中出现的键值进行分区。例如,按销售区域或产品线进行分区。
- 哈希分区:表通过为每个分区指定模数和余数进行分区。每个分区都包含其分区键的哈希值除以模数后产生指定余数的行。
这些方法可以组合成多级分区设计,例如,在第一级使用日期范围分区,并在子级使用列表分区。(源文档中的一个示例图说明了使用日期范围和列表分区的多级设计)。
分区表结构
在 Apache Cloudberry 中对表进行分区时:
- 您定义的主表(