Pregunta

Tengo una tabla que, esencialmente, se ve así:

CREATE TABLE myTable (
    id INT auto_increment,
    field1 TINYINT,
    field2 CHAR(2),
    field3 INT,
    theDate DATE,
    otherStuff VARCHAR(20)
    PRIMARY KEY (id)
    UNIQUE KEY (field1, field2, field3)
)

Me gustaría particionar la tabla basándose en el mes y año de theDate, sin embargo la manual está diciendo a mí no se me permite:

  

Todas las columnas utilizadas en la expresión de particionamiento de una tabla con particiones deben ser parte de cada clave única que puede tener la mesa. En otras palabras, cada clave única de la tabla debe utilizar cada columna en la expresión de partición de la tabla

¿Cuáles son mis opciones aquí? ¿Todavía puedo particionar la tabla?

¿Fue útil?

Solución

escribí un post sobre este tema aquí Escalado rieles con tabla de MySQL particionamiento (carriles utiliza PKs entero). La misma técnica se debe trabajar en su caso, con la excepción, por desgracia, hay que soltar el [campo1, campo2, field3] clave única.

Dejar caer una clave única fue un problema con el que traté también (aunque no se menciona en el post). Trabajé alrededor de ella por implementado un cheque existencia antes de crear el registro, dándose cuenta de que todavía nos íbamos a incautos ocasionales debido a la condición de carrera. En la práctica, esto no resultó ser un problema. Sin embargo, el aumento del rendimiento de consulta requiere ampliar el tamaño del búfer innodb porque el I / O estamos brutal.

Otros consejos

No, no en la forma actual.

Se puede quitar la clave principal y en lugar de simplemente hacer "id" un índice normal. El índice único secundaria seguiría siendo un problema y que tendría que eliminar esta o cambiar el esquema de partición de involucrar theDate columna.

Si está partición basada en el año y mes de una columna de fecha y hora, ¿ha pensado en tener una tabla para cada combinación año-mes y luego usando un fusionar mesa ? Sé que esto no responde directamente a su pregunta, pero pensé que podría ayudar ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top