
# 列表分区
列表分区（List Partition）允许用户在每个分区的描述里，为分区键指定离散值列表，从而控制数据行如何被映射到各个分区。这种分区方式的优势在于，它能以枚举分区值的形式对数据进行分区操作，尤其适合对无序且不相关的数据集进行分组与组织。
在处理分区键值时，若某些值未被定义在列表之中，用户可以借助默认分区（DEFAULT）来存储这些数据。通过这种方式，所有未能映射到其他任何分区的行都不会导致错误产生。示例如下：
```
gaussdb=# CREATE TABLE bmsql_order_line (
    ol_w_id          INTEGER   NOT NULL,
    ol_d_id          INTEGER   NOT NULL,
    ol_o_id          INTEGER   NOT NULL,
    ol_number        INTEGER   NOT NULL,
    ol_i_id          INTEGER   NOT NULL,
    ol_delivery_d    TIMESTAMP,
    ol_amount        DECIMAL(6,2),
    ol_supply_w_id   INTEGER,
    ol_quantity      INTEGER,
    ol_dist_info     CHAR(24)
)
PARTITION BY LIST(ol_d_id)
(
    PARTITION p0 VALUES (1,4,7),
    PARTITION p1 VALUES (2,5,8),
    PARTITION p2 VALUES (3,6,9),
    PARTITION p3 VALUES (DEFAULT)
);
--删除表。
gaussdb=# DROP TABLE bmsql_order_line;
```
上述例子和之前给出的哈希分区的例子类似，同样依据ol_d_id列来进行分区。但是在List分区中直接通过对ol_d_id的可能取值范围进行限定，不在列表中的数据会进入p3分区（DEFAULT）。
相比哈希分区，列表分区对分区键的可控性更强，通常能够精确地把目标数据存放在预期的分区中。然而，要是列表中的取值较多，分区定义工作就会变得繁琐。在这种情形下，建议采用哈希分区。
总体而言，列表分区和哈希分区常用于对无序、不相关的数据集进行分组与组织。
![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
列表分区在分区键设置上有明确的数量限制，其分区键最多可支持16列。并且，分区键列数不同时，子分区定义时列表中枚举值对NULL值的处理规则也不同。当分区键仅定义为1列时，子分区列表里的枚举值不允许为NULL值；而当分区键定义为多列时，子分区列表中的枚举值则允许存在NULL值。
