Tengo una mesa con 1.4 billones de registros. La estructura de la tabla es la siguiente:
CREATE TABLE text_page (
text VARCHAR(255),
page_id INT UNSIGNED
) ENGINE=MYISAM DEFAULT CHARSET=ascii
El requisito es crear un índice sobre la columna text
.
El tamaño de la mesa es de aproximadamente 34G.
He intentado crear el índice con la siguiente declaración:
ALTER TABLE text_page ADD KEY ix_text (text)
Después de 10 horas de espera, finalmente abandono este enfoque.
¿Hay alguna solución viable para este problema?
ACTUALIZACIÓN : es poco probable que la tabla se actualice, inserte o elimine. La razón por la que se crea un índice en la columna text
es porque este tipo de consulta SQL se ejecuta con frecuencia:
SELECT page_id FROM text_page WHERE text = ?
ACTUALIZACIÓN : He resuelto el problema al particionar la tabla.
La mesa está dividida en 40 piezas en columna text
. Luego, la creación del índice en la tabla tarda aproximadamente 1 hora en completarse.
Parece que la creación del índice MySQL se vuelve muy lenta cuando el tamaño de la tabla se vuelve muy grande. Y la partición reduce la tabla en troncos más pequeños.
CREATE INDEX
declaración normal ?