列表分区

列表分区在很多方面类似于范围分区。与 RANGE 分区一样,必须明确定义每个分区。两种类型的分区之间的主要区别在于,在列表分区中,每个分区是根据一组值列表中的一个列值中的列值的成员资格来定义和选择的,而不是在一组连续范围之一中定义和选择的。值。这是通过使用 PARTITION BY LIST(expr) 来完成的,其中 expr 是列值或基于列值的表达式并返回整数值,然后通过 VALUES IN (value_list) 定义每个分区,其中 value_list 是以逗号分隔的整数列表。

对于下面的示例,我们假设要分区的表的基本定义由此处显示的 CREATE TABLE 语句提供:

CREATE TABLE employees (
    id INT NOT NULL,
    fname VARCHAR(30),
    lname VARCHAR(30),
    hired DATE NOT NULL DEFAULT '1970-01-01',
    separated DATE NOT NULL DEFAULT '9999-12-31',
    job_code INT,
    store_id INT
);

假设在 4 个特许经营店中分布有 20 个视频商店,如下表所示。

区域 商店 ID 号码
3,5,6,9,17
1,2,10,11,19,20
西方 4,12,13,14,18
中央 7,8,15,16

要以属于同一区域的存储的行存储在同一分区中的方式对此表进行分区

ALTER TABLE employees PARTITION BY LIST(store_id) (
    PARTITION pNorth VALUES IN (3,5,6,9,17),
    PARTITION pEast VALUES IN (1,2,10,11,19,20),
    PARTITION pWest VALUES IN (4,12,13,14,18),
    PARTITION pCentral VALUES IN (7,8,15,16)
);

基于 MySQL 官方文档