Разделение MySQL 5.1 - PullRequest
       4

Разделение MySQL 5.1

9 голосов
/ 02 апреля 2011

У меня есть следующий пример таблицы ...

mysql> CREATE TABLE part_date3
    ->      (  c1 int default NULL,
    ->  c2 varchar(30) default NULL,
    ->  c3 date default NULL) engine=myisam
    ->      partition by range (to_days(c3))
    -> (PARTITION p0 VALUES LESS THAN (to_days('1995-01-01')),
    -> PARTITION p1 VALUES LESS THAN (to_days('1996-01-01')) ,
    -> PARTITION p2 VALUES LESS THAN (to_days('1997-01-01')) ,
    -> PARTITION p3 VALUES LESS THAN (to_days('1998-01-01')) ,
    -> PARTITION p4 VALUES LESS THAN (to_days('1999-01-01')) ,
    -> PARTITION p5 VALUES LESS THAN (to_days('2000-01-01')) ,
    -> PARTITION p6 VALUES LESS THAN (to_days('2001-01-01')) ,
    -> PARTITION p7 VALUES LESS THAN (to_days('2002-01-01')) ,
    -> PARTITION p8 VALUES LESS THAN (to_days('2003-01-01')) ,
    -> PARTITION p9 VALUES LESS THAN (to_days('2004-01-01')) ,
    -> PARTITION p10 VALUES LESS THAN (to_days('2010-01-01')),
    -> PARTITION p11 VALUES LESS THAN MAXVALUE );
Query OK, 0 rows affected (0.00 sec)

Скажите, что это полно данных, и я хочу разместить в разделе 2011 года p11, а затем сделать максимальное значение p12. Существует ли эффективный способ сделать это без выгрузки и перезагрузки всей таблицы?

Ответы [ 3 ]

7 голосов
/ 24 июля 2013

Чтобы ответить на ваш точный вопрос

Я хочу добавить в раздел 2011 года значение p11, а затем сделать максимальное значение p12

Вот запрос

ALTER TABLE part_date3 REORGANIZE PARTITION p11 INTO (
    PARTITION p11 VALUES LESS THAN (TO_DAYS('2011-01-01')),
    PARTITION p12 VALUES LESS THAN MAXVALUE
);
3 голосов
/ 04 апреля 2011

Вам необходимо удалить раздел MAXVALUE, добавить новый раздел и снова добавить новый раздел MAXVALUE. Это быстрая операция, и вы не потеряете данные ни в одном разделе, кроме раздела MAXVALUE.

Если вы хотите сохранить данные в разделе MAXVALUE, взгляните на предложения REORGAINZE PARTITION и COALESCE PARTITION команды ALTER TABLE. http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

У меня была такая же проблема. Я удалил раздел MAXVALUE, добавил новый раздел, но больше не добавил раздел MAXVALUE. В моем случае приложение никогда не вставило бы в будущем столько записей с данными, сколько потребуется для раздела MAXVALUE.

Обслуживание разделов очень хорошо сочетается с событиями. Увидеть http://dev.mysql.com/tech-resources/articles/partitioning-event_scheduler.html

0 голосов
/ 02 апреля 2011

http://dev.mysql.com/doc/refman/5.1/en/partitioning-management-range-list.html предполагает, что вы можете просто добавить другой раздел с помощью

ALTER TABLE `part_date3`
ADD PARTITION (PARTITION p12 VALUES LESS THAN (to_days('2011-01-01')));

, хотя, очевидно, вы должны сначала проверить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...