第一種在建表時同時分區(qū):可以根據(jù)需要一次建立足夠的分區(qū)
CREATE TABLE CRT(
ID VARCHAR(32) NOT NULL,
CELL_ID VARCHAR(15) NULL,
YEAR INT(11) NOT NULL,
MONTH INT(11) NOT NULL,
DAY INT(11) NULL,
TIME INT NULL,
MINUTE INT(11) NOT NULL,
QUANTITY INT(11) NULL,
PRIMARY KEY(ID, YEAR, MONTH)
) PARTITION BY RANGE COLUMNS(YEAR, MONTH) PARTITIONS 2(
PARTITION P202205 VALUES LESS THAN(2022, 6),
PARTITION P202206 VALUES LESS THAN(2022, 7));
第二種,建表之后調(diào)整分區(qū):數(shù)據(jù)庫會重建分區(qū)同時根據(jù)數(shù)據(jù)時間把對應(yīng)的數(shù)據(jù)插入對應(yīng)的分區(qū)。
- 注意,重點在這:整個表重新分配分區(qū),不受新增分區(qū)時遞增影響。
ALTER TABLE CRT
PARTITION BY RANGE COLUMNS (YEAR, MONTH) (
PARTITION p202301 VALUES LESS THAN (2023, 2),
PARTITION p202302 VALUES LESS THAN (2023, 3),
PARTITION p202303 VALUES LESS THAN (2023, 4),
PARTITION p202304 VALUES LESS THAN (2023, 5)
);
第三種,建表之后新增分區(qū):
注意,重點在這:分區(qū)表是按范圍進行分區(qū),其中,分區(qū)順序是嚴格地進行遞增。就是說,如果想在中間新增分區(qū)是不可行的,只能按照順序進行遞增。
比如,數(shù)據(jù)庫中已經(jīng)存在(2023, 6)分區(qū),現(xiàn)在要新增一個分區(qū)VALUES LESS THAN (2023, 5),這時就會報錯VALUES LESS THAN value must be strictly increasing for each partition。
這時候就要采用第二種調(diào)整分區(qū)方式了,數(shù)據(jù)庫會重建分區(qū)同時根據(jù)數(shù)據(jù)時間把對應(yīng)的數(shù)據(jù)插入對應(yīng)的分區(qū)。
千萬別學(xué)網(wǎng)上別人說的刪掉分區(qū),或者重新建表重建分區(qū),重新導(dǎo)入數(shù)據(jù),刪掉分區(qū)會刪掉數(shù)據(jù),重新導(dǎo)入數(shù)據(jù)會很費時間。
ALTER TABLE CRT
ADD PARTITION (PARTITION p202305 VALUES LESS THAN (2023, 6));
- 清理分區(qū)數(shù)據(jù)為空,保留分區(qū)不刪除,僅僅是清理數(shù)據(jù):
ALTER TABLE CRT TRUNCATE PARTITION 202205;