【发布时间】:2018-03-22 20:20:53
【问题描述】:
向已经分区的表添加另一个分区的最佳方法是什么?
原始的CREATE TABLE 语句如下所示:
CREATE TABLE `command_log` (
`id` bigint(20) NOT NULL,
`insert_time` datetime NOT NULL,
`start_time` timestamp NULL DEFAULT '0000-00-00 00:00:00',
`end_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`command` varchar(255) NOT NULL,
`parameters` varchar(255) DEFAULT NULL,
`result` mediumblob,
`status` int(11) NOT NULL,
PRIMARY KEY (`id`,`insert_time`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
/*!50100 PARTITION BY RANGE (to_days(insert_time))
(PARTITION p001 VALUES LESS THAN (736237) ENGINE = InnoDB,
PARTITION p002 VALUES LESS THAN (736268) ENGINE = InnoDB,
PARTITION p003 VALUES LESS THAN (736298) ENGINE = InnoDB,
...
PARTITION p064 VALUES LESS THAN (738156) ENGINE = InnoDB,
PARTITION p065 VALUES LESS THAN (738187) ENGINE = InnoDB,
PARTITION p066 VALUES LESS THAN (738215) ENGINE = InnoDB,
PARTITION p067 VALUES LESS THAN MAXVALUE ENGINE = InnoDB)
假设我只想添加 1 个额外的分区,在本例中为 p067。这是否需要完整的ALTER TABLE 语句,例如:
ALTER TABLE command_log
PARTITION by range (to_days(insert_time))
(
partition p059 VALUES LESS THAN (to_days('2020-08-01'))
, partition p060 VALUES LESS THAN (to_days('2020-09-01'))
, partition p061 VALUES LESS THAN (to_days('2020-10-01'))
, partition p062 VALUES LESS THAN (to_days('2020-11-01'))
, partition p063 VALUES LESS THAN (to_days('2020-12-01'))
, partition p064 VALUES LESS THAN (to_days('2021-01-01'))
, partition p065 VALUES LESS THAN (to_days('2021-02-01'))
, partition p066 VALUES LESS THAN (to_days('2021-03-01'))
, partition p067 VALUES LESS THAN (to_days('2021-04-01'))
, partition p068 VALUES LESS THAN (MAXVALUE)
);
如果是这样,究竟会发生什么?
我未包含在此语句中的旧分区是否会被删除(例如 p001 - p058)?
这样做是否会清除表中的任何现有数据(例如 p059 中的数据)?
谢谢!
【问题讨论】:
标签: mysql database-partitioning