2011-03-23 24 views
6

Entiendo que a partir de MySQL 5.5, ahora puede particionar una tabla con valores no enteros como varchar. Tengo una tabla donde realizo muchas búsquedas en una sola columna varchar, por lo tanto, me gustaría dividirla por motivos de rendimiento.Tabla de particiones MySQL 5.5 por A-Z

En todos los casos, el valor de la columna es una sola palabra alfabética (estrictamente minúsculas a-z, impuesta por validación).

Lo que me gustaría hacer es partición esta tabla por la primera letra de cada palabra almacenada, por lo que todas las palabras que empiezan con 'a' ir en la primera partición, 'b' en el segundo, etc.

Mi presentimiento es que probablemente podría construir la sentencia crear/modificar tabla para usar la declaración LIKE, pero no estoy seguro de la sintaxis.

¿Alguien ha hecho algo como esto usando MySQL 5.5?

Respuesta

6

Si está decidido a hacerlo por la primera letra, creo que RANGE partitioning haría el truco. Sin embargo, si no tiene un requisito absoluto para la partición por por primera letra, LINEAR KEY partitioning podría ser mejor.

Aquí es un ejemplo Levanté la página del manual situados y modificados para usar una columna varchar:

CREATE TABLE employees (
    id INT NOT NULL, 
    fname VARCHAR(30), 
    lname VARCHAR(30), 
    hired DATE NOT NULL DEFAULT '1970-01-01', 
    separated DATE NOT NULL DEFAULT '9999-12-31', 
    job_code INT NOT NULL, 
    store_id INT NOT NULL 
) 
PARTITION BY RANGE COLUMNS(fname) (
    PARTITION p0 VALUES LESS THAN ('h'), 
    PARTITION p1 VALUES LESS THAN ('m'), 
    PARTITION p2 VALUES LESS THAN ('t'), 
    PARTITION p3 VALUES LESS THAN MAXVALUE 
); 

y ejecutarlo:

... Physical database connection acquired for: Feynman 
12:33:07 [CREATE - 0 row(s), 0.062 secs] Command processed. No rows were affected 
... 1 statement(s) executed, 0 row(s) affected, exec/fetch time: 0.062/0.000 sec [0 successful, 1 warnings, 0 errors] 
+0

no veo ninguna sintaxis para la partición GAMA con algo más que números y fechas. Creo que la clave lineal puede ser la única opción aquí ... – jswolf19

+0

Gracias Tom, está cerca de lo que necesito, sin embargo, necesito que actúe sobre una subcadena de fname (la primera char solamente), y MENOS QUE NO es codicioso ya que quiero que sea exclusivamente esa letra en esa partición, por lo que un igual podría ser más apropiado. – alphadevx

+0

cualquier cosa que sea MENOS DE 'b' comenzará con 'a'. Después de eso, cualquier cosa menor a 'c' comenzará con 'b'. Y así sucesivamente ... Esto hace que participes por primera letra, pero aún permite que el optimizador de consultas haga lo suyo cuando te dan 'fname = 'albert''. –

Cuestiones relacionadas