| ||||
Consulta sobre Actualizar, Ingresar y eliminar Buen dia señores tengo una duda que espero me puedan despejar, ¿Qué es más óptimo hacer en un tabla que alberga cerca de 1 millon de registros aproximadamente, a la cual se le toma del indice 700'000 ¿Actualizar los 300'000 que quedan registro por registro ó borrarlos y generarlos con nuevos datos?. Espero me haya explicado bien, sino me preguntan. Saludos!.
__________________ Internet es tener todo el conocimiento global a tu disposición. Desarrollo de Software - Ejemplos .Net |
| ||||
Respuesta: Consulta sobre Actualizar, Ingresar y eliminar Hola iislas, gracias por tu respuesta, cuando digo tomo del indice 700'000 es porque las filas tienen un campo ID que es correlativo, la razon para actualizar los 300'000 es porque la tabla es como un historial... al anular un documento en un periodo los registros que le siguen hacen calculos con el registro anterior por eso apartir del id 700'001 para adelante se actualizaran los datos, y pues era eso mi consulta... ahora.... es mejor hacer update registro por registro o eliminar esos registros y volverlos a generar? Espero haber sido claro. Gracias!
__________________ Internet es tener todo el conocimiento global a tu disposición. Desarrollo de Software - Ejemplos .Net |
| ||||
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:
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.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; 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 |
| ||||
Respuesta: Consulta sobre Actualizar, Ingresar y eliminar Gracias Matanga por tu respuesta, todo esto no se va a realizar en 1 sentencia, se va a actualizar registro por registro por separado ya que se hará un recalculo de cada documento. Gracias a todos haré pruebas para ver cual es la forma que menos tiempo toma. Saludos!.
__________________ Internet es tener todo el conocimiento global a tu disposición. Desarrollo de Software - Ejemplos .Net |
| ||||
Respuesta: Consulta sobre Actualizar, Ingresar y eliminar SQL Server, como muchos otros motores de bases de datos, no fue creado para procesar registro x registro.
__________________ MCTS Isaias Islas |
Etiquetas: |