2011-04-01 4 views
9

Ho la seguente tabella di esempio ...MySQL 5.1 partizionamento

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) 

dire che questo è pieno di dati e voglio slot in una partizione 2011 al p11 e poi fare il maxvalue p12 esiste un modo efficace di fare questo senza dumping e ricaricare l'intero tavolo?

risposta

3

È necessario eliminare la partizione MAXVALUE, aggiungere la nuova partizione e aggiungere nuovamente una nuova partizione MAXVALUE. Questa è un'operazione veloce e non si perderebbero dati in alcuna partizione diversa dalla partizione MAXVALUE.

Se si desidera conservare i dati in MAXVALUE partizione, uno sguardo ai REORGAINZE divisorio e COALESCE clausole partizione ALTER TABLE http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

Ho avuto lo stesso problema. Ho abbandonato la partizione MAXVALUE, ho aggiunto la nuova partizione ma non ho aggiunto di nuovo la partizione MAXVALUE. Nel mio caso, l'app non inserirà mai dati registrati tanto in futuro che richiederebbe una partizione MAXVALUE.

La manutenzione delle partizioni va molto bene con gli eventi. Vedi http://dev.mysql.com/tech-resources/articles/partitioning-event_scheduler.html

+0

Funziona alla grande. Hai trovato la partizione che funziona bene per te? –

+0

Sì. In MySQL 5.5 ho più di 400 milioni di righe in una tabella, con prestazioni piuttosto lineari. È necessario fare attenzione durante l'interrogazione di tali tabelle per assicurarsi che ci siano abbastanza suggerimenti nella query per l'eliminazione delle partizioni. – Dojo

0

http://dev.mysql.com/doc/refman/5.1/en/partitioning-management-range-list.html suggerisce che si può semplicemente aggiungere un'altra partizione tramite

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

anche se, ovviamente, è necessario verificare che il primo.

+0

No, non funzionerà come MAXVALUE deve essere l'ultima tabella. Si creerà un errore se si tenta di aggiungere una partizione dopo. –

7

di rispondergli domanda precisa

voglio slot in una partizione 2011 al p11 e poi fare il maxvalue p12

Ecco l'interrogazione

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