2011-01-04 10 views
13

Tengo una tabla (en MySQL) llamada unused con aproximadamente 5.4 millones de filas. La tabla se ve así:Agregar índice en una tabla grande toma para siempre

CREATE TABLE `unused` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT, 
    `account_id` bigint(20) DEFAULT NULL, 
    `heading_label` varchar(255) NOT NULL, 
    `value` varchar(255) NOT NULL, 
    `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    PRIMARY KEY (`id`), 
    KEY `fk_account_id` (`account_id`), 
    CONSTRAINT `unused_ibfk_1` FOREIGN KEY (`account_id`) REFERENCES `account` (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=80524905 DEFAULT CHARSET=latin1 

Pensé que las consultas en esta tabla podrían ir más rápido si tuviera que agregar un índice. Intenté ejecutar esto:

create index heading_label 
on unused (heading_label) using btree 

Permití que este comando se ejecutara durante una o dos horas antes de reiniciar MySQL. A pesar de que esta tabla tiene más de 5 millones de filas, no parece que lleve más de una hora ejecutar este tipo de cosas. Pero tal vez eso es normal. Realmente no sé lo que estoy haciendo. ¿Alguien me puede iluminar?

+1

Sería de gran ayuda si usted le dio la definición de la tabla de verdad. –

+0

Edité la pregunta para incluir esto. –

Respuesta

15

Es normal dependiendo de las especificaciones de su servidor. La forma en que MySQL crea índices está en la tabla y luego ordena y agrega los índices. Esto significa que necesita volver a escribir todos los datos, y luego ordenar todos los datos (no es barato de ninguna manera). Depende del rendimiento de E/S de su servidor y de la cantidad de ram que pueda darle.

Éstos son algunos recursos para obtener más información ...

+1

De acuerdo. Agregué un índice a una tabla de 1.2 mil filas y tardé media hora. – Mikhail

+1

Pero depende del hardware. En una caja de producción (2 xquad core xeon, 32 gb ram, FC SAN) agregar un índice en una columna int para una tabla de 500 millones de filas (tamaño de tabla de 30 gb) lleva unos 20 minutos. Hay tanto que entra (el tipo de datos, tamaño, velocidad de E/S, tamaño de la memoria, etc.) que es imposible decir qué es rápido o lento sin conocer todos los detalles ... – ircmaxell

+0

Tengo un procesador de 2.4GHz y 4GB de RAM, si eso ayuda. –

Cuestiones relacionadas