2009-05-05 11 views
8

Tengo una tabla MyISAM con más de 10^7 filas. Al agregar datos, tengo que actualizar ~ 10 filas al final. ¿Es más rápido eliminarlos y luego insertar los nuevos, o es más rápido actualizar esas filas? Los datos que deben actualizarse no son parte del índice. ¿Qué pasa con el índice/fragmentación de datosrendimiento MySQL ¿ELIMINAR o ACTUALIZAR?

Respuesta

20

UPDATE es mucho más rápido.

Cuando UPDATE, los registros de la tabla apenas está siendo reescrito con nuevos datos.

Cuando DELETE, los índices deben ser actualizados (recuerda, se elimina toda la fila, no sólo las columnas que hay que modificar) y bloques de datos se pueden mover (si se golpea el límite PCTFREE)

Y todo esto debe hacerse nuevamente en INSERT.

Es por eso que siempre se debe utilizar

INSERT ... ON DUPLICATE KEY UPDATE 

en lugar de REPLACE.

La primera es una operación UPDATE en caso de una violación de clave, mientras que la última es DELETE/INSERT.

3

Es más rápido de actualizar. También puede utilizar INSERT ON DUPLICATE KEY UPDATE

INSERT INTO table (a,b,c) VALUES (1,2,3) 
    ON DUPLICATE KEY UPDATE c=c+1; 

Para más detalles leer actualizar documentation

+0

Amigo, fuiste más rápido en 3 minutos, ¡qué injusticia es!) –

1

BORRAR Lógicamente + ADD = 2 acciones, UPDATE = 1 acción. Además, al eliminar y agregar nuevos cambios, se registran los ID en auto_increment, por lo que si esos registros tienen relaciones que se romperían o necesitarían actualizaciones también. Iría por ACTUALIZACIÓN.

0

mediante una actualización en la Columna = 'algo' debe utilizar un índice, siempre y cuando los criterios de búsqueda se encuentra en el índice (si se trata de una exploración o buscan es un tema completamente diferente).

si están haciendo estas actualizaciones mucho, pero 'no tiene un índice en la columna de criterios, yo recomendaría la creación de un índice en la columna que está utilizando. eso debería ayudar a acelerar las cosas.

Cuestiones relacionadas