2010-07-14 23 views
5

Esto es más una pregunta de teoría.¿La actualización de MySQL es más rápida que INSERT INTO?

Si estoy ejecutando 50,000 consultas que insertan nuevas filas, y 50,000 consultas que actualizan esas filas, ¿cuál llevará menos tiempo?

+3

Esto depende de varios factores. ¿Las tablas tienen índices? ¿Va a actualizar todas las columnas en las que insertaría la inserción o solo un subconjunto de la misma? Además, no veo la relevancia de esta pregunta. En caso de duda, mida su caso de uso con sus datos ... –

+0

Sugiero que, dado que INSERT y UPDATE no hacen lo mismo, el mejor para usar sería el que hace lo necesario, y para el diablo con cuánto tiempo lleva. Consulte http://c2.com/cgi/wiki?PrematureOptimization –

Respuesta

4

Insertar sería más rápido porque con la actualización debe buscar primero el registro que va a actualizar y luego realizar la actualización.

Aunque esto apenas parece una comparación válida, ya que nunca tiene la opción de insertar o actualizar ya que los dos satisfacen dos necesidades completamente diferentes.

EDITAR: También debo agregar que esto es con la suposición de que no hay desencadenantes de inserción u otras situaciones que podrían causar posibles cuellos de botella.

+3

no del todo cierto ... podría tener una tabla con la lista de las horas de "último inicio de sesión". Puede actualizar los registros o insertar nuevos cada vez que un usuario inicie sesión. Aunque tal comportamiento también dependería de los tiempos de acceso, las tasas de crecimiento de la tabla, etc. –

+2

No necesariamente: la actualización podría ser más rápida debido a menos divisiones de página dependiendo de qué los índices agrupados y otros son y una miríada de otros factores. –

+0

Acepto que hay factores que podrían contribuir a que este no sea el caso. Pero creo que en la mayoría de los escenarios de usuarios cotidianos esto no es así. Pero podría estar equivocado. – spinon

1

Con una inserción en la misma tabla, siempre puede insertar todas las filas con una consulta, por lo que es mucho más rápido que insertar uno por uno. Al actualizar, puede actualizar varias filas a la vez, pero no puede aplicar esto a cada situación de actualización, y con frecuencia tiene que ejecutar una consulta de actualización a la vez (cuando se actualiza una identificación específica) - y en una gran mesa esto es muy lento tener que encontrar la fila y luego actualizarlo cada vez. También es más lento incluso si has indexado la tabla, según mi experiencia.

4
Insert Operation : Create -> Store 

Update Operation : Retrieve -> Modify -> Store 

Insertar Operación más rápido.

0

Como punto aparte, no olvide que al hacer más inserciones que actualizaciones, tendrá más filas cuando llegue a seleccionar, por lo que reducirá la velocidad de la operación de lectura.

Entonces, la verdadera pregunta es: ¿qué te importa más, una inserción rápida o una lectura rápida? De nuevo, esto depende de ciertos factores, en particular (y aún no mencionados) motor de DB, como InnoDB (que ahora es estándar en PHPMyAdmin por cierto).

Estoy de acuerdo con todos los demás, hay demasiado que considerar caso por caso y, por lo tanto, realmente necesita ejecutar sus propias pruebas y evaluar la situación desde allí en función de sus necesidades.

Cuestiones relacionadas