Как изменить определение разделов в MySQL? - PullRequest
0 голосов
/ 15 октября 2019

Ниже моя таблица создания MySQL, и если я хочу изменить раздел p7 на 350, а остальное в p8, возможно ли это? Если это возможно, кто-нибудь может мне помочь, пожалуйста?

CREATE TABLE `Site` (
  `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, 
  `status` int(11) DEFAULT NULL, 
  `message` varchar(2000) DEFAULT NULL, 
  `createdOnDTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, 
  `updatedOnDTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
  `createdBy` varchar(100) DEFAULT NULL, 
  `updatedBy` varchar(100) DEFAULT NULL
) PARTITION BY RANGE (id) (
  PARTITION p1 
  VALUES 
    LESS THAN (50), 
    PARTITION p2 
  VALUES 
    LESS THAN (100), 
    PARTITION p3 
  VALUES 
    LESS THAN (150), 
    PARTITION p4 
  VALUES 
    LESS THAN (200), 
    PARTITION p5 
  VALUES 
    LESS THAN (250), 
    PARTITION p6 
  VALUES 
    LESS THAN (300), 
    PARTITION p7 
  VALUES 
    LESS THAN MAXVALUE
);

1 Ответ

0 голосов
/ 15 октября 2019

Да, есть возможность изменить разделы. Для этого необходимо перестроить разделы, поэтому для другой копии должно быть доступно пространство, и таблица будет заблокирована, пока перестраиваются разделы.

Это может быть довольно быстро на пустых или почти пустых разделах,но займет много времени на больших перегородках. Другие операции с таблицей будут блокироваться во время выполнения операций с разделами.

Перед операцией разделы выглядят следующим образом

, PARTITION p6  VALUES LESS THAN (300)
, PARTITION p7  VALUES LESS THAN MAXVALUE
)

Мы можем выполнить оператор для «разделенного» раздела p7 на два раздела, что-то вроде этого:

ALTER TABLE `Site` REORGANIZE PARTITION `p7` INTO 
( PARTITION `p7` VALUES LESS THAN (350)
, PARTITION `pmaxvalue` VALUES LESS THAN MAXVALUE
) ;

после завершения операции определение раздела будет выглядеть примерно так:

, PARTITION p6         VALUES LESS THAN (300)
, PARTITION p7         VALUES LESS THAN (350)
, PARTITION pmaxvalue  VALUES LESS THAN MAXVALUE
)

В дальнейшем мы можем разбить раздел pmaxvalueочередной раз. На этот раз демонстрация разделения на три раздела:

ALTER TABLE `Site` REORGANIZE PARTITION `pmaxvalue` INTO 
( PARTITION `p8` VALUES LESS THAN (400)
, PARTITION `p9` VALUES LESS THAN (450)
, PARTITION `pmaxvalue` VALUES LESS THAN MAXVALUE
)

Синтаксис для REORGANIZE PARTITION и обслуживание разделов в целом задокументировано в Справочном руководстве MySQL.

...