Me funciona muy lento este query

01/12/2003 - 17:12 por anonymous | Informe spam
Todos los días me vienen facturas en archivos de texto y
se cargan a una tabla temporal (TMP_ FACTURAS ) para
hacer a partir de esta tabla temporal varios procesos,
entre los cuales está el ver si las facturas que vienen
ya NO estaban cargadas para UN CLIENTE Y UN DIA
DETERMINADO, y en caso de que así suceda tengo que borrar
todas las facturas para ese CLIENTE y ese DIA. Esto por
cada una de las facturas nuevas que vienen (que pueden
ser muchas) con lo cual la forma que lo estoy haciendo
abajo me tarda muchísimo!!!!!!!!
Esto es me tarda unas 2 h 30 minutos para borrar cuando
lo probé con 5.000.000 de facturas nuevas y 6 millones de
facturas cargadas.
Aunque incluso con 100.000 registros también anda lento...

Cómo puedo hacer para agilizar este query, ya sea re-
diagramándolo ó de otra manera.
Las estructuras de las tablas son:
FACTURAS: FacturaID (CLAVE), FechaID (CLAVE)(Numérico),
Importe,...
TMP_FACTURAS: FacturaID (CLAVE), FechaID (CLAVE)
(Numérico), Importe,...
CLIENTES: ClienteID (CLAVE), CodigoCliente,
NombreCliente,...


El query que hago es este:
CodigoCliente que transfiero a la tabla --Temporal y en
la tabla de Facturas tengo el ClienteID por lo que tengo
que hacer el

DELETE factu
FROM FACTURAS factu
INNER JOIN TMP_ FACTURAS tmp ON factu.FechaID =
tmp.FechaID
INNER JOIN CLIENTES cli ON factu.ClienteID = cli.
ClienteID and tmp.CodigoCliente = cli.CodigoCliente
 

Leer las respuestas

#1 Miguel Egea
01/12/2003 - 17:28 | Informe spam
Mira el tamaño que tiene tu log después de borrar esos registros. El
problema está en que para poder hacer rollback tiene que guardar mucha
información en el log de transacciones.
Puedes intentar borrar menos registros o usar alguna estrategia basada en
esa idea.

Saludos
miguel Egea
"anonymous" escribió en el mensaje
news:00dd01c3b825$ef2bed40$
Todos los días me vienen facturas en archivos de texto y
se cargan a una tabla temporal (TMP_ FACTURAS ) para
hacer a partir de esta tabla temporal varios procesos,
entre los cuales está el ver si las facturas que vienen
ya NO estaban cargadas para UN CLIENTE Y UN DIA
DETERMINADO, y en caso de que así suceda tengo que borrar
todas las facturas para ese CLIENTE y ese DIA. Esto por
cada una de las facturas nuevas que vienen (que pueden
ser muchas) con lo cual la forma que lo estoy haciendo
abajo me tarda muchísimo!!!!!!!!
Esto es me tarda unas 2 h 30 minutos para borrar cuando
lo probé con 5.000.000 de facturas nuevas y 6 millones de
facturas cargadas.
Aunque incluso con 100.000 registros también anda lento...

Cómo puedo hacer para agilizar este query, ya sea re-
diagramándolo ó de otra manera.
Las estructuras de las tablas son:
FACTURAS: FacturaID (CLAVE), FechaID (CLAVE)(Numérico),
Importe,...
TMP_FACTURAS: FacturaID (CLAVE), FechaID (CLAVE)
(Numérico), Importe,...
CLIENTES: ClienteID (CLAVE), CodigoCliente,
NombreCliente,...


El query que hago es este:
CodigoCliente que transfiero a la tabla --Temporal y en
la tabla de Facturas tengo el ClienteID por lo que tengo
que hacer el

DELETE factu
FROM FACTURAS factu
INNER JOIN TMP_ FACTURAS tmp ON factu.FechaID tmp.FechaID
INNER JOIN CLIENTES cli ON factu.ClienteID = cli.
ClienteID and tmp.CodigoCliente = cli.CodigoCliente

Preguntas similares