2011-01-18 12 views
12

Me gustaría saber si hay una diferencia en términos de rendimiento entre los pedidos insert ignore y replace en MySQL.¿Cuál es la diferencia de rendimiento entre "insertar ignorar" y reemplazar en MySQL?

Estoy usando MySQL 5.0.31. Todas mis tablas están en InnoDB.

+1

Debe tenerse en cuenta que cualquier diferencia puede no tener sentido en todas las aplicaciones, excepto en las aplicaciones de mayor rendimiento, e incluso entonces, es probable que existan * muchas * rutas más obvias para la optimización en otro lugar. –

+0

Tienes razón, pero tenemos tablas bastante grandes (docenas de millones de registros) y un alto tráfico. El rendimiento es un problema para nosotros. –

+0

Sin embargo, hay que tener cuidado con esta pregunta: son afirmaciones muy diferentes, pero la pregunta puede implicar la suposición de que son comparables (por ejemplo, preguntar por una diferencia de rendimiento entre una selección y una eliminación no tendría mucho sentido). –

Respuesta

28

inserción ignorar - si existe clave/fila, omita la inserción

reemplazar - si existe clave/fila, eliminar la fila partido, e inserte de nuevo

Así, replace debería ser más lento.
Pero insert ignore no hace la actualización

detalles: http://dev.mysql.com/doc/refman/5.5/en/replace.html

Reemplazar funciona exactamente igual que INSERT, excepto que si un viejo fila de la tabla tiene el mismo valor que una nueva fila para una clave principal o un índice ÚNICO, la fila anterior se elimina antes de que se inserte la nueva fila

+0

gracias por la página: Ya lo estaba leyendo, pero demasiado rápido y no pude encontrar la única oración que quería leer –

+4

Sea asesorado en la base de la sustitución: El DELETE lo hará llorar si tiene extranjero teclas con magia "ON DELETE CASCADE". Se habrá ido. Se insertará una nueva fila, pero las tablas de conexión NO se actualizarán. Reemplazar puede hacerte llorar. – Nanne

+0

@nanne gracias a Dios que no hemos hecho esa magia "ON DELETE CASCADE" –

0

Apenas un comentario general. La inserción implica que lo que estaba allí antes permanece. Reemplazar implica que algo que ya está allí está destinado a la eliminación y el elemento para la inserción se instala en su lugar. La acción de reemplazo debe tener como objetivo inherentemente un elemento que ya está allí, eliminarlo e instalar el nuevo elemento.

+0

No necesariamente es el caso de MySQL. Puede usar replace si no está seguro de si la entrada existe o no, solo que si existe, quiere que sea reemplazada, sino insertada. –

Cuestiones relacionadas