valores update una tipos tabla subconsultas modificar insertar ejemplos ejecutar datos como comando actualizar sql-server performance

update - Costo de inserciones vs actualización en SQL Server



modificar valores de una tabla sql (6)

Tengo una mesa con más de un millón de filas. Esta tabla se usa para indexar imágenes tiff . Cada imagen tiene campos como date , number , etc. Tengo usuarios que indexan estas imágenes en lotes de 500. Necesito saber si es mejor insertar 500 filas y luego realizar 500 actualizaciones o, cuando el usuario termine de indexar, hacer los 500 insertos con todos los datos. Una cosa muy importante es que si hago las 500 inserciones al principio, esta vez es gratis para mí porque puedo hacerlo la noche anterior.

Entonces la pregunta es: ¿es mejor hacer inserciones o inserciones y actualizaciones, y por qué? He definido un valor de id para cada imagen, y también tengo otros índices en los campos.


Creo que las inserciones se ejecutarán más rápido. No requieren una búsqueda (cuando haces una actualización, básicamente estás haciendo el equivalente de una selección con la cláusula where). Y también, un inserto no bloqueará las filas como lo hará una actualización, por lo que no interferirá con ninguna selección que esté sucediendo contra la tabla al mismo tiempo.


El plan de ejecución para cada consulta le dirá cuál debería ser más caro. El factor de limitación real serán las escrituras en el disco, por lo que puede necesitar ejecutar algunas pruebas mientras ejecuta perfmon para ver qué consulta causa más escrituras y hace que la cola del disco sea más larga (más tiempo es malo).


Esta no es una pregunta corta y seca. Los puntos de Krishna y Galegian son acertados.

Para las actualizaciones, el impacto disminuirá si las actualizaciones afectan los campos de longitud fija. Si actualiza los campos varchar o blob, puede agregar un costo de división de página durante la actualización cuando el nuevo valor supere la longitud del valor anterior.


Hacer las inserciones primero y luego las actualizaciones parece ser una mejor idea por varias razones. Estará insertando en un momento de bajo volumen de transacciones. Como las inserciones tienen más datos, este es un mejor momento para hacerlo.

Como está utilizando un valor de id (que presumiblemente está indexado) para las actualizaciones, la sobrecarga de las actualizaciones será muy baja. También tendría menos datos durante sus actualizaciones.

También puede desactivar las transacciones en el nivel de lote (500 inserciones / actualizaciones) y usarlas para cada registro individual, reduciendo así algunos gastos generales.

Finalmente, pruebe esto para ver el rendimiento real en su servidor antes de tomar una decisión final.


Las actualizaciones en el servidor Sql dan como resultado filas fantasma, es decir, Sql cruza una fila y coloca una nueva. La fila tachada se elimina más adelante.

Ambas inserciones y actualizaciones pueden causar divisiones de página de esta manera, ambas ''agregan'' datos de manera efectiva, es solo que las actualizaciones señalan primero las cosas viejas.

Además de esto, las actualizaciones deben buscar primero la fila, lo que para muchos datos puede llevar más tiempo que la actualización.

Los insertos casi siempre serán más rápidos, especialmente si están en orden o si la tabla subyacente no tiene un índice agrupado.

Al insertar cantidades de datos más grandes en una tabla, observe los índices actuales; pueden demorar un tiempo en modificarse y compilarse. Agregar valores en el medio de un índice siempre es más lento.

Puede pensar que es como agregar a una libreta de direcciones: el Sr. Z solo se puede agregar a la última página, mientras que usted tendrá que encontrar espacio en el medio para el Sr. M.


No soy un tipo de base de datos, pero me imagino que hacer las inserciones de una vez sería más rápido porque las actualizaciones requieren una búsqueda, mientras que las inserciones no.