Ver Mensaje Individual
  #4 (permalink)  
Antiguo 09/07/2011, 23:06
Avatar de matanga
matanga
 
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Respuesta: Consulta sobre Actualizar, Ingresar y eliminar

En general, las operaciones DML son similares, el motor realiza más o menos el mismo trabajo para un insert, delete o update.

Si regeneras los registros tendrás varias operaciones DML en vez de una, pero si el proceso te permite modificar los datos en una única sentencia, podrías sacar ventajas si el plan de ejecución utiliza Parallel Query, por ejemplo si T1 es la tabla que tiene los datos y #T1 es una tabla temporal con la misma estructura:

Código:
insert into #t1 
select una_funcion(un_campo) 
from t1 where id >= 700001; --registros modificados

insert into #t1 
select un_campo 
from t1 where id < 700001; --registros no modificados

truncate table t1;

insert into t1 select * from #t1;
Si haces un update es menos trabajo porque tienes una única operación DML, aunque rara vez se resuelve con Parallel Query y además existe el caso (poco probable) que al actualizar los datos, si alguna fila crece en tamaño al punto de que ya no entra en la página actual, el motor tiene que gestionar un proceso de migración para mover la fila a otra página, esto no pasa en un insert porque se sabe de antemano el espacio necesario para los datos nuevos.

El tema es relativo, el primer caso puede ser útil para tablas grandes, si la cantidad de registros a modificar son mayoría, si el proceso se ejecuta con poca frecuencia o si te puedes permitir un bloqueo a nivel de tabla, lo opuesto para el segundo. Prueba cada uno y compara los resultados.

Saludos