Saltar al contenido

¿Qué es mejor para grandes cambios en una tabla: ELIMINAR e INSERTAR cada vez o ACTUALIZAR existente?

Sé libre de divulgar nuestra página y códigos en tus redes sociales, apóyanos para aumentar esta comunidad.

Solución:

Realmente depende de la cantidad de datos que están cambiando. Digamos que esta tabla tiene 20 columnas. Y también tiene 5 índices, cada uno en una diferencia. columna.

Ahora, si los valores en las 20 columnas están cambiando O incluso si los datos en 5 columnas están cambiando y estas 5 columnas están todas indexadas, entonces es mejor que “elimines e insertes”. Pero si solo cambian 2 columnas y digamos que no forman parte de ningún índice no agrupado, entonces es mejor que “Actualice” los registros porque en este caso solo se actualizará el índice agrupado (y los índices no tendrán que hacerlo). estar actualizado).


En más investigaciones, descubrí que el comentario anterior por mí es algo redundante ya que SQL Server internamente tiene 2 mecanismos separados para realizar una ACTUALIZACIÓN. – Una “actualización en el lugar” (es decir, cambiando el valor de una columna a una nueva en la fila original) o como una “ACTUALIZACIÓN no en el lugar” (ELIMINAR seguido de INSERTAR).

Las actualizaciones en el lugar son la regla y se realizan si es posible. Aquí las filas permanecen exactamente en la misma ubicación en la misma página en la misma extensión. Solo se modifican los bytes afectados. El tlog solo tiene un registro (siempre que no haya activadores de actualización). Las actualizaciones ocurren en el lugar si se está actualizando un montón (y hay suficiente espacio en la página). Las actualizaciones también ocurren si el agrupamiento key cambia pero la fila no necesita moverse en absoluto.

Por ejemplo: si tiene un índice agrupado en el apellido y tiene los nombres: Able, Baker, Charlie Ahora desea actualizar Baker a Becker. No es necesario mover filas. Entonces esto puede tomar lugar. Mientras que, si tiene que actualizar Able a Kumar, las filas deberán cambiarse (aunque estarán en la misma página). En este caso, SQL Server realizará una ELIMINACIÓN seguida de una INSERCIÓN.

Teniendo en cuenta lo anterior, le sugiero que realice una ACTUALIZACIÓN normal y deje que SQL Server descubra la mejor manera de hacerlo internamente.

Para obtener más detalles sobre las funciones internas de “ACTUALIZAR” o, de hecho, sobre las funciones internas relacionadas con SQL Server, consulte el libro de Kalen Delaney, Paul Randal y otros: SQL Server 2008 Internals.

¿Ha investigado el comando MERGE en SQL 2008? Aquí hay un ejemplo básico:

  merge YourBigTable ybt
  using (select distinct (RecordID) from YourOtherTable) yot
     on yot.Recordid = YBT.RecordID
  when NOT matched by target
  then  insert (RecordID)
        values (yot.DeviceID) ;

Esto es básicamente un comando “UPSERT”. Actualice si existe, insértelo si no existe. MUY rápido, muy buen comando.

Pero yo mismo verifiqué Eliminar e Insertar vs Actualizar en una tabla que tiene 30 millones (3 millones de rupias) de registros. Esta tabla tiene un compuesto único agrupado key y 3 no agrupados keys. Para Eliminar e Insertar, tomó 9 min. Para la actualización tomó 55 min. Solo hay una columna que se actualizó en cada fila.

Entonces, les pido que no adivinen. Las ecuaciones cambiarán cuando se trate de una tabla grande con muchas columnas y muchos datos.

Si te ha resultado de provecho nuestro post, sería de mucha ayuda si lo compartieras con otros entusiastas de la programación y nos ayudes a difundir esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *