Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Borrado másivo, tarda mucho tiempo

Estas en el tema de Borrado másivo, tarda mucho tiempo en el foro de SQL Server en Foros del Web. Muy buenas. Escribo este post porque en una tabla de costes, tengo que actualizar a cada X tiempo unos registros que provienen de otra tabla. ...
  #1 (permalink)  
Antiguo 21/01/2013, 08:35
 
Fecha de Ingreso: enero-2013
Ubicación: Huelva
Mensajes: 3
Antigüedad: 11 años, 3 meses
Puntos: 0
Borrado másivo, tarda mucho tiempo

Muy buenas.

Escribo este post porque en una tabla de costes, tengo que actualizar a cada X tiempo unos registros que provienen de otra tabla. Entonces pues lo que hago es filtrar los registros que quiero borrar con una consulta de eliminación y despues hago una consulta de anexar y restablezco los datos con los nuevos.

Para localizar los datos a borrar, uso un where especificando que es lo que quiero borrar.

La consulta es básica:

Código:
DELETE PARTES.IDPARTE, PARTES.TIPOPARTE, PARTES.FECHA, Month([FECHA]) AS MES, PARTES.SEMANA, PARTES.CODPARCELA, PARTES.HORASTRAGRICASA, PARTES.HORASPLUSTRAGRICASA, PARTES.HORASPLUSTRALQUILER, PARTES.HORASTRALQUILER, PARTES.HORASPEON, PARTES.HORASPODADOR, PARTES.HORASRECOLECCION, PARTES.SUELDOTOTALRECOLECCION, PARTES.OTROSGASTOS, PARTES.CODSUELDO, PARTES.CODTAREA, PARTES.PARTESEMANALCODTAREA, PARTES.PARTESEMANALOTRASTAREAS, PARTES.CODTRACTOR, PARTES.CODMAQUINARIA, PARTES.CALDO, PARTES.HERBICIDAIDPASE, PARTES.HERBICIDACODAPLICADOR, PARTES.COSECHACUADRILLACATEGORIA, PARTES.COSECHACAMPAÑA, PARTES.TRATAMIENTOSNUMTRATAMIENTO, PARTES.TRATAMIENTOSAPLICADOR, PARTES.TRATAMIENTOSPROBLEMAS, PARTES.ENCARGADO, PARTES.OBSERVACIONES
FROM PARTES
WHERE (((PARTES.TIPOPARTE)="GASTOS GENERALES - PARTES 2012" Or (PARTES.TIPOPARTE)="GASTOS GENERALES - CONTABILIDAD 2012"));
Pues esta consulta, para borrar unos 65.000 registros de un total de 300.000 me puede durar unos 20-30 minutos en hacerla. Sin embargo, a la hora de anexar de nuevo los datos tan sólo me dura 1-2 minutos.

Uso Access como cliente y ms sqlserver 2000 como servidor.

¿Alguna sugerencia?
Muchas gracias de antemano.
  #2 (permalink)  
Antiguo 21/01/2013, 09:03
 
Fecha de Ingreso: diciembre-2012
Mensajes: 83
Antigüedad: 11 años, 4 meses
Puntos: 4
Respuesta: Borrado másivo, tarda mucho tiempo

en vez de borrar parte del registro para luego actualizar los valores nulos, prueba borrando todo el registro y luego insertando la fila completa nuevamente, creo que tardaría menos.

DELETE
FROM PARTES
WHERE TIPOPARTE = "GASTOS GENERALES - PARTES 2012" Or TIPOPARTE = "GASTOS GENERALES - CONTABILIDAD 2012"

y despues de eso el insert! saludos :)
  #3 (permalink)  
Antiguo 21/01/2013, 09:04
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Borrado másivo, tarda mucho tiempo

Yo lo primero que miraría sería hacer un índice de "Tipoparte" ya que es el campo que te filtra el delete.
__________________
Aviso: No se resuelven dudas por MP!
  #4 (permalink)  
Antiguo 21/01/2013, 09:14
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Borrado másivo, tarda mucho tiempo

yo que el lo que haria seria un borrado por partes, digo si soporta el top percent :P

algo asi

delete top percent 10 from tabla
go
delete top percent 10 from tabla
go
delete top percent 10 from tabla
go
delete top percent 10 from tabla
go
delete top percent 40 from tabla
go
delete top percent 50 from tabla
go
delete from tabla

aqui aplicamos la maxima de "divide y venceras"

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 22/01/2013, 06:39
 
Fecha de Ingreso: enero-2013
Ubicación: Huelva
Mensajes: 3
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Borrado másivo, tarda mucho tiempo

El índice ya lo tiene, uno non-clustered, ya que el clustered lo tiene el ID principal. Probaré esas soluciones a ver si al menos me quito algunos minutillos de espera. Gracias por las respuestas. Saludos.
  #6 (permalink)  
Antiguo 22/01/2013, 09:14
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Borrado másivo, tarda mucho tiempo

con la solucion que te plantee(y esta probada) no te quitas minutillos, reduces el tiempo de borrado de tablas gigantescas en horas, por ejemplo implemente esa tecnica en un borrado que duraba casi 6 horas y despues de implementar un borrado por partes solo dura una hora :P y estamos hablando de casi 16 millones de registros :)

y el indice noncluster en que campo esta? te recomiendo que este en el campo por el cual haces el where de tu delete.

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 23/01/2013, 05:32
 
Fecha de Ingreso: enero-2013
Ubicación: Huelva
Mensajes: 3
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Borrado másivo, tarda mucho tiempo

Bueno. Ya sé cual es el problema. El problema es el cliente usado para la consulta (Access 2007). He hecho la consulta de eliminación directamente en el servidor a traves del SQL Query Analizer para probar y tan sólo me duro menos de un minuto. Así que me tendré que plantear usar el SQL Server para hacer esas cosas tan pesadas.

El indice Non-clustered esta en el campo donde filtra el where.

Muchisimas gracias por la ayuda :)

Etiquetas: 2000, borrado, registro, server, sql, tabla, tarda
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:35.