2011-04-01 19 views
9

Mam następujący przykład stół ...MySQL 5.1 Podział

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) 

powiedzieć, że jest pełen danych i chcę rozciąć w 2011 partycji na p11, a następnie dokonać MAXVALUE p12 czy istnieje skuteczny sposób zrobić to bez zrzucania i ponownego ładowania całego stołu?

Odpowiedz

3

Musisz zrzucić partycję MAXVALUE, dodać nową partycję i ponownie dodać nową partycję MAXVALUE. Jest to szybka operacja i nie utracisz danych na żadnej partycji poza partycją MAXVALUE.

Jeśli chcesz zachować dane w MAXVALUE partion, rzucić okiem na REORGAINZE partycję i zlewają klauzule rozbiorze ALTER TABLE http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

miałem ten sam problem. Zrzuciłem partycję MAXVALUE, dodałem nową partycję, ale nie dodałem ponownie partycji MAXVALUE. W moim przypadku aplikacja nigdy nie wstawiłaby żadnego rekordu tak dużo danych w przyszłości, że wymagałaby partycji MAXVALUE.

Obsługa partycji przebiega bardzo dobrze w przypadku zdarzeń. Zobacz http://dev.mysql.com/tech-resources/articles/partitioning-event_scheduler.html

+0

To działa świetnie. Czy uważasz, że partycja działa dobrze dla ciebie? –

+0

Tak. W MySQL 5.5 mam ponad 400 milionów wierszy w jednej tabeli, z dość liniową wydajnością. Podczas odpytywania takich tabel należy zachować ostrożność, aby upewnić się, że istnieje wystarczająca ilość wskazówek w zapytaniu o działanie funkcji przycinania partycji. – Dojo

0

http://dev.mysql.com/doc/refman/5.1/en/partitioning-management-range-list.html sugeruje, że można po prostu dodać inną partycję poprzez

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

choć oczywiście należy przetestować, że w pierwszej kolejności.

+0

Nie, to nie zadziała, ponieważ MAXVALUE musi być ostatnim stołem. Wystąpi błąd podczas próby dodania partycji po. –

7

Aby odpowiedzieć Ci dokładnie pytanie

chcę rozciąć w 2011 partycji na p11, a następnie dokonać MAXVALUE p12

Oto zapytaniu

ALTER TABLE part_date3 REORGANIZE PARTITION p11 INTO (
    PARTITION p11 VALUES LESS THAN (TO_DAYS('2011-01-01')), 
    PARTITION p12 VALUES LESS THAN MAXVALUE 
);