普通表轉(zhuǎn)換為分區(qū)表
當(dāng)單張普通表的數(shù)據(jù)量超過(guò)1億或者1 TB時(shí),建議使用分區(qū)表。本文介紹了使用ALTER語(yǔ)法將單張普通表轉(zhuǎn)換為分區(qū)表的注意事項(xiàng)以及示例。
前提條件
普通表中的主鍵和唯一鍵都需要包含分區(qū)表中的分區(qū)鍵字段。
注意事項(xiàng)
普通表轉(zhuǎn)換為分區(qū)表的過(guò)程中,所有的數(shù)據(jù)都需要重新進(jìn)行讀寫,屬于COPY DDL操作。因此,轉(zhuǎn)換時(shí)間比較長(zhǎng),且整個(gè)轉(zhuǎn)換過(guò)程會(huì)阻塞當(dāng)前表上的所有DML操作。
特殊場(chǎng)景下的普通表轉(zhuǎn)換為分區(qū)表,如果按照時(shí)間做RANGE分區(qū),并且需要將所有數(shù)據(jù)放在一個(gè)歷史分區(qū)中,可以將普通表快速轉(zhuǎn)換為RANGE分區(qū)表。
語(yǔ)法
ALTER TABLE table_name
PARTITION BY RANGE {(expr) | COLUMNS(column_list)}
(partition_definition [, partition_definition] ...);
其中,partition_definition
的定義與各個(gè)類型的分區(qū)表中的partition_definition
保持一致,支持二級(jí)分區(qū)。PolarDB支持的分區(qū)表類型請(qǐng)參見(jiàn)概述。
如需了解更多關(guān)于普通表轉(zhuǎn)換為分區(qū)表的內(nèi)容,請(qǐng)搜索釘釘群號(hào)加群進(jìn)行咨詢。釘釘群號(hào):24490017825。
支持轉(zhuǎn)換的分區(qū)表類型
目前所有的分區(qū)表都支持將普通表轉(zhuǎn)換為分區(qū)表的操作。分區(qū)表類型請(qǐng)參見(jiàn)概述和INTERVAL RANGE簡(jiǎn)介。
示例
以普通表t1
為例,介紹將普通表轉(zhuǎn)換為分區(qū)表的操作。
創(chuàng)建普通表
t1
。CREATE TABLE t1 ( `a` int , `b` int , Primary Key(a, b));
執(zhí)行以下命令,向表t1中插入數(shù)據(jù)。
INSERT INTO t1 VALUES(1,1),(2,1),(3,1),(4,1),(111,111),(3333,333);
將表
t1
轉(zhuǎn)換為分區(qū)表。將表
t1
轉(zhuǎn)換為L(zhǎng)IST DEFAULT HASH分區(qū)表。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
轉(zhuǎn)換為HASH分區(qū)表。ALTER TABLE t1 partition BY HASH(a) PARTITIONS 12;
將表
t1
轉(zhuǎn)換為RANGE分區(qū)表。ALTER TABLE t1 partition by RANGE(a) ( PARTITION p0 VALUES LESS THAN (100), PARTITION p1 VALUES LESS THAN (200) );