2011-04-01 18 views
9

Tengo el siguiente ejemplo de tabla ...MySQL 5.1 Partición

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) 

Decir esto está lleno de datos y quiero a la ranura en una partición de 2011 a p11 y luego hacer el maxvalue p12 está allí una manera eficiente de hacer esto sin descargar y volver a cargar toda la mesa?

Respuesta

3

Debe soltar la partición MAXVALUE, agregar la nueva partición y agregar una nueva partición MAXVALUE de nuevo. Esta es una operación rápida y no perderá datos en ninguna partición que no sea la partición MAXVALUE.

Si desea conservar los datos de la partición MAXVALUE, echar un vistazo a PARTICIÓN REORGAINZE y se unen cláusulas de reparto de ALTER TABLE http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

que tenía el mismo problema. Solté la partición MAXVALUE, agregué la nueva partición pero no agregué la partición MAXVALUE nuevamente. En mi caso, la aplicación nunca insertaría ningún registro con tanta información en el futuro que requeriría una partición MAXVALUE.

El mantenimiento de la partición va muy bien con Eventos. Ver http://dev.mysql.com/tech-resources/articles/partitioning-event_scheduler.html

+0

Eso funciona genial. ¿Has encontrado que la partición funciona bien para ti? –

+0

Sí. En MySQL 5.5 tengo más de 400 millones de filas en una sola tabla, con un rendimiento bastante lineal. Debe tener cuidado al consultar dichas tablas para asegurarse de que haya suficientes pistas en la consulta para que funcione la poda de la partición. – Dojo

0

http://dev.mysql.com/doc/refman/5.1/en/partitioning-management-range-list.html sugiere que sólo tiene que añadir otra partición a través de

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

aunque, obviamente, debe probar que la primera.

+0

No, eso no funcionará ya que MAXVALUE tiene que ser la última tabla. Lanzará un error si intenta agregar una partición después. –

7

Para responder a la pregunta exacta

Quiero ranura en una partición de 2011 a p11 y luego hacer el maxvalue p12

Ésta es la consulta

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