普通表快速轉(zhuǎn)換為RANGE分區(qū)表
PolarDB支持在不做數(shù)據(jù)重分布的情況下,可以使用該語法快速的將普通表轉(zhuǎn)為RANGE分區(qū)表。本文將介紹PolarDB普通表快速轉(zhuǎn)RANGE分區(qū)表的操作步驟。
背景信息
PolarDB普通表快速轉(zhuǎn)RANGE分區(qū)表時,普通表的數(shù)據(jù)不經(jīng)校驗直接作為分區(qū)表的第一個分區(qū)的數(shù)據(jù),其他分區(qū)為空分區(qū)。PolarDB普通表快速轉(zhuǎn)RANGE分區(qū)表通常用于想把歷史數(shù)據(jù)放入第一個分區(qū),同時避免使用普通的ALTER PARTITION BY
語法重寫一遍數(shù)據(jù),快速的將普通表轉(zhuǎn)為RANGE分區(qū)表的場景。
如需了解更多關(guān)于普通表快速轉(zhuǎn)換為RANGE分區(qū)表的內(nèi)容,請搜索釘釘群號加群進行咨詢。釘釘群號:24490017825。
前提條件
集群版本需為PolarDB MySQL版8.0.2版本且Revision version為8.0.2.2.10或以上。您可以通過查詢版本號確認集群版本。
使用限制
若單表通過INSTANT ADD COLUMN
語句添加過字段,則不能將其轉(zhuǎn)為RANGE分區(qū)表。
使用說明
普通表快速轉(zhuǎn)RANGE分區(qū)表
語法
在ALTER TABLE語句中添加WITHOUT VALIDATION
關(guān)鍵字。
ALTER TABLE table_name
PARTITION BY RANGE {(expr) | COLUMNS(column_list)}
(partition_definition [, partition_definition] ...)
WITHOUT VALIDATION;
其中,partition_definition
如下:
PARTITION partition_name
VALUES LESS THAN {(value | value_list) | MAXVALUE}
參數(shù)說明
參數(shù) | 參數(shù)說明 |
table_name | 表名稱。 |
column_list | LIST COLUMNS類型使用,分區(qū)字段列表,不支持表達式。 |
RANGE(expr) | RANGE分區(qū)字段表達式。 |
partition_name | 分區(qū)名稱。 |
value_list | 字段的邊界值。 |
MAXVALUE | 最大值。 |
示例
將普通表t1
轉(zhuǎn)為RANGE分區(qū)表。
CREATE TABLE t1 (
`a` int ,
`b` int ,
Primary Key(a, b));
insert into t1 values(1,1),(2,1),(3,1),(4,1),(111,111),(3333,333);
alter table t1 partition by range(a) (
partition p0 values less than (100),
partition p1 values less than (200)
) WITHOUT VALIDATION;
t1
表的所有數(shù)據(jù)會不經(jīng)校驗的全部轉(zhuǎn)到partition p0
,如果您確認普通表的數(shù)據(jù)全部符合p0
定義的邊界,可以使用該語法快速的進行普通表快速轉(zhuǎn)RANGE分區(qū)表。
請務必保證普通表中的數(shù)據(jù)全部符合分區(qū)表第一個分區(qū)定義的邊界,否則轉(zhuǎn)成分區(qū)表之后,不符合分區(qū)規(guī)則的數(shù)據(jù)可能會查詢不到。
組合使用語法
普通表快速轉(zhuǎn)RANGE分區(qū)表WITHOUT VALIDATION
可以搭配INTERVAL
分區(qū)表(自動創(chuàng)建相同間隔的RANGE
分區(qū))組合使用。
示例
CREATE TABLE t1(
ID int,
DATE DATE,
PRIMARY KEY (ID,DATE)
);
ALTER TABLE t1
partition by RANGE COLUMNS(date) INTERVAL(DAY, 1) (
PARTITION p0 VALUES LESS THAN ('2023-01-31')
) without validation;
性能對比
PolarDB普通表快速轉(zhuǎn)RANGE分區(qū)表相對于原生MySQL普通表轉(zhuǎn)分區(qū)表功能,只改變表的元數(shù)據(jù),不涉及到表數(shù)據(jù)的重寫,所以速度非常快,耗時大約不到0.1秒。而原生MySQL普通表轉(zhuǎn)分區(qū)表功能則需要校驗并重寫數(shù)據(jù),耗時較長,且隨數(shù)據(jù)量的增加耗時會變長。
表大小 | 原生MySQL普通表轉(zhuǎn)分區(qū)表 | PolarDB普通表快速轉(zhuǎn)RANGE分區(qū)表 |
1 GB (6001215 rows) | 52.24秒 | 0.10秒 |
10 GB (59986052 rows) | 8分鐘45.82秒 | 0.07秒 |