LIST分区是按离散值列表对表水平拆分的方式,适用于地区编码、状态码等取值有限且不连续的场景;需用PARTITION BY LIST配合VALUES IN定义分区,主键必须包含分区键,且仅支持单列分区。

LIST分区是一种按离散值列表对表进行水平拆分的方式,适用于列值有限、明确且不连续的场景。比如地区编码、状态码、产品类别等字段,取值固定且数量不多,用LIST分区比RANGE或HASH更直观、更易维护。
LIST分区依赖PARTITION BY LIST子句,必须配合VALUES IN明确指定每个分区包含的具体值。主键或唯一索引必须包含分区键——这是硬性要求,否则建表会失败。
VALUES IN中DEFAULT分区)p_beijing、p_shanghai,便于后续管理假设有一张用户地区分布表,按region_code分区:
CREATE TABLE users_by_region (
id INT NOT NULL,
name VARCHAR(50),
region_code CHAR(2) NOT NULL,
PRIMARY KEY (id, region_code)
)
PARTITION BY LIST (region_code) (
PARTITION p_beijing VALUES IN ('BJ'),
PARTITION p_shanghai VALUES IN ('SH'),
PARTITION p_guangdong VALUES IN ('GD', 'SZ', 'GZ'),
PARTITION p_default VALUES IN (DEFAULT)
);注意:PRIMARY KEY必须包含region_code(即分区键),否则会提示“A PRIMARY KEY must include all columns in the table's partitioning function”。
LIST分区不像RANGE那样支持自动添加新分区,新增值需手动ALTER TABLE ... ADD PARTITION;删旧值则用DROP PARTITION。操作前务必确认数据归属和业务影响。
VALUES IN定义后不可修改,只能新建分区或合并再重分ALTER TABLE ... REORGANIZE PARTITION(MySQL),将旧分区拆分或合并WHERE region_code = 'SH'条件明确,优化器只扫描p_shanghai
VALUES IN匹配,会进DEFAULT分区(如有),否则报错基本上就这些。LIST分区不复杂但容易忽略约束细节,建表前理清值域、主键设计和默认兜底策略,能省去后期大量调整成本。
以上就是SQL按列表分区完整教程_SQL LIST分区结构解析的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号