首批通过分布式安全可靠测评,为关键业务系统打造
关于分区表
更新时间:2026-07-04 20:42:14
在 OceanBase 数据库中,分区是指根据一定的规则,把一个表分解成多个更小的、更容易管理的部分。每个分区都是一个独立的对象,具有自己的名称和可选的存储特性。本文主要介绍分区的相关概念以及使用分区的好处。
概述
对于访问数据库的应用而言,逻辑上访问的只有一个表或一个索引,但是实际上这个表可能由数十个物理分区对象组成,每个分区都是一个独立的对象,可以独自处理访问,也可以作为表的一部分处理访问。分区对应用来说是完全透明的,不影响应用的业务逻辑。
从应用程序的角度来看,只存在一个 Schema 对象。访问分区表不需要修改 SQL 语句。分区对于许多不同类型的数据库应用程序非常有用,尤其是那些管理大量数据的应用程序。
分区表可以由一个或多个分区组成,这些分区是单独管理的,可以独立于其他分区运行。表可以是已分区或未分区的,即使已分区表仅由一个分区组成,该表也不同于未分区表,非分区表不能添加分区。
分区表也可以由一个或多个表分区段组成。OceanBase 数据库将每个表分区的数据存储在自己的 SStable 中,每个 SStable 包含表数据的一部分。
优势
提高可用性
分区不可用并不意味着对象不可用。查询优化器自动从查询计划中删除未引用的分区。因此,当分区不可用时,查询不受影响。
更轻松地管理对象
分区对象具有可以集体或单独管理的片段。DDL 语句可以操作分区而不是整个表或索引。因此,可以对重建索引或表等资源密集型任务进行分解。例如,可以一次只移动一个分区。如果出现问题,只需要重做分区移动,而不是表移动。此外,对分区进行
TRUNCATE操作可以避免大量数据被DELETE。减少 OLTP 系统中共享资源的争用
在 TP 场景中,分区可以减少共享资源的争用。例如,DML 分布在许多分区而不是一个表上。
增强数据仓库中的查询性能
在 AP 场景中,分区可以加快即时查询的处理速度。分区键有天然的过滤功能。例如,查询一个季度的销售数据,当销售数据按照销售时间进行分区时,仅仅需要查询一个分区或者几个分区,而不是整个表。
提供更好的负载均衡效果
OceanBase 数据库的存储单位和负载均衡单位都是分区。不同的分区可以存储在不同的节点。因此,一个分区表可以将不同的分区分布在不同的节点,这样可以将一个表的数据比较均匀的分布在整个集群。
分区类型
OceanBase 数据库 Oracle 模式目前支持的分区类型如下:
Range 分区
List 分区
Hash 分区
组合分区(二级分区)
Range 分区
Range 分区根据分区表定义时为每个分区建立的分区键值范围,将数据映射到相应的分区中。它是常见的分区类型,经常跟日期类型一起使用。例如:可以将业务日志表按日/周/月分区。
List 分区
List 分区使得您可以显式的控制记录行如何映射到分区,具体方法是为每个分区的分区键指定一组离散值列表,这点跟 Range 分区和 Hash 分区都不同。List 分区的优点是可以方便的对无序或无关的数据集进行分区。
Hash 分区
Hash 分区适合于对不能用 Range 分区、List 分区方法的场景,它的实现方法简单,通过对分区键上的 Hash 函数值来散列记录到不同分区中。如果您的数据符合下列特点,使用 Hash 分区是个很好的选择:
不能指定数据的分区键的列表特征。
不同范围内的数据大小相差非常大,并且很难手动调整均衡。
使用 Range 分区后数据聚集严重。
并行 DML、分区剪枝和分区连接等性能非常重要。
二级分区
二级分区通常是先使用一种分区策略,然后在子分区再使用另外一种分区策略,适合于业务表的数据量非常大时。使用组合分区能发挥多种分区策略的优点。