当单张普通表的数据量超过1亿或者1 TB时,建议使用分区表。本文介绍了使用ALTER语法将单张普通表转换为分区表的注意事项以及示例。
前提条件
普通表中的主键和唯一键都需要包含分区表中的分区键字段。
注意事项
普通表转换为分区表的过程中,所有的数据都需要重新进行读写,属于COPY DDL操作。因此,转换时间比较长,且整个转换过程会阻塞当前表上的所有DML操作。
特殊场景下的普通表转换为分区表,如果按照时间做RANGE分区,并且需要将所有数据放在一个历史分区中,可以将普通表快速转换为RANGE分区表。
语法
ALTER TABLE table_name
PARTITION BY RANGE {(expr) | COLUMNS(column_list)}
(partition_definition [, partition_definition] ...);
其中,partition_definition
的定义与各个类型的分区表中的partition_definition
保持一致,支持二级分区。PolarDB支持的分区表类型请参见概述。
说明
如需了解更多关于普通表转换为分区表的内容,请搜索钉钉群号加群进行咨询。钉钉群号:24490017825。
支持转换的分区表类型
目前所有的分区表都支持将普通表转换为分区表的操作。分区表类型请参见概述和INTERVAL RANGE简介。
示例
以普通表t1
为例,介绍将普通表转换为分区表的操作。
创建普通表
t1
。CREATE TABLE t1 ( `a` int , `b` int , Primary Key(a, b));
执行以下命令,向表t1中插入数据。
INSERT INTO t1 VALUES(1,1),(2,1),(3,1),(4,1),(111,111),(3333,333);
将表
t1
转换为分区表。将表
t1
转换为LIST DEFAULT HASH分区表。ALTER TABLE t1 partition BY LIST(a) (PARTITION p0 VALUES IN (1,2,3,4,5), PARTITION p1 VALUES IN (6,7,8,9,10), PARTITION pd DEFAULT PARTITIONS 9);
将表
t1
转换为HASH分区表。ALTER TABLE t1 partition BY HASH(a) PARTITIONS 12;
将表
t1
转换为RANGE分区表。ALTER TABLE t1 partition by RANGE(a) ( PARTITION p0 VALUES LESS THAN (100), PARTITION p1 VALUES LESS THAN (200) );
文档内容是否对您有帮助?