156 lines
3.2 KiB
Markdown
156 lines
3.2 KiB
Markdown
分区策略
|
|
=========================
|
|
|
|
本节主要介绍 OceanBase 数据库的分区策略。
|
|
|
|
OceanBase 数据库目前支持的分区策略如下:
|
|
|
|
* MySQL 模式
|
|
|
|
* Range 分区
|
|
|
|
|
|
|
|
* Range Columns 分区
|
|
|
|
|
|
|
|
* List 分区
|
|
|
|
|
|
|
|
* List Columns 分区
|
|
|
|
|
|
|
|
* Hash 分区
|
|
|
|
|
|
|
|
* Key 分区
|
|
|
|
|
|
|
|
* 组合分区
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Range 分区
|
|
-----------------------------
|
|
|
|
Range 分区根据分区表定义时为每个分区建立的分区键值范围,将数据映射到相应的分区中。它是常见的分区类型,经常跟日期类型一起使用。例如,可以将业务日志表按日/周/月分区。
|
|
|
|
Range Columns 分区
|
|
-------------------------------------
|
|
|
|
Range Columns 分区与 Range 分区的作用基本类似,不同之处在于:
|
|
|
|
* Range Columns 分区的分区键的结果不要求是整型,可以是任意类型。
|
|
|
|
|
|
|
|
* Range Columns 分区的分区键不能使用表达式。
|
|
|
|
|
|
|
|
* Range Columns 分区的分区键可以写多个列(即列向量)。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List 分区
|
|
----------------------------
|
|
|
|
List 分区使得您可以显式的控制记录行如何映射到分区,具体方法是为每个分区的分区键指定一组离散值列表,这点跟 Range 分区和 Hash 分区都不同。List 分区的优点是可以方便的对无序或无关的数据集进行分区。
|
|
|
|
List Columns 分区
|
|
------------------------------------
|
|
|
|
List Columns 分区与 List 分区的作用基本相同,不同之处在于:
|
|
|
|
* List Columns 分区的分区键不要求是整型,可以是任意类型。
|
|
|
|
|
|
|
|
* List Columns 分区的分区键可以是多列(即列向量)。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Hash 分区
|
|
----------------------------
|
|
|
|
Hash 分区适合于对不能用 Range 分区、List 分区方法的场景,它的实现方法简单,通过对分区键上的 Hash 函数值来散列记录到不同分区中。如果您的数据符合下列特点,使用 Hash 分区是个很好的选择:
|
|
|
|
* 不能指定数据的分区键的列表特征。
|
|
|
|
|
|
|
|
* 不同范围内的数据大小相差非常大,并且很难手动调整均衡。
|
|
|
|
|
|
|
|
* 使用 Range 分区后数据聚集严重。
|
|
|
|
|
|
|
|
* 并行 DML、分区剪枝和分区连接等性能非常重要。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Key 分区
|
|
---------------------------
|
|
|
|
Key 分区与 Hash 分区类似,也是通过对分区个数取模的方式来确定数据属于哪个分区,不同的是系统会对 Key 分区键做一个内部默认的 Hash 函数后再取模。
|
|
|
|
Key 分区有如下特点:
|
|
|
|
* Key 分区的分区键不要求为整型,可以为任意类型
|
|
|
|
|
|
|
|
* Key 分区的分区键不能使用表达式
|
|
|
|
|
|
|
|
* Key 分区的分区键支持向量
|
|
|
|
|
|
|
|
* Key 分区的分区键中不指定任何列时,表示 Key 分区的分区键是主键。
|
|
|
|
示例如下:
|
|
|
|
```sql
|
|
obclient>CREATE TABLE t1 (
|
|
c1 INT PRIMARY KEY,
|
|
c2 INT)
|
|
PARTITION BY KEY()
|
|
PARTITIONS 5;
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
组合分区
|
|
-------------------------
|
|
|
|
组合分区通常是先使用一种分区策略,然后在子分区再使用另外一种分区策略,适合于业务表的数据量非常大时。使用组合分区能发挥多种分区策略的优点。
|
|
|
|
在指定二级分区分区策略细节时,可以使用 `SUBPARTITION TEMPLATE` 子句。
|