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

Preguntas similare

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
Respuesta Responder a este mensaje
#2 Javier Loria
01/12/2003 - 20:50 | Informe spam
Hola:
Prueba lo siguiente:

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

Adicionalmente asegurate que en FACTU y TMP_Facturas exista un indice sobre
las columnas FechaID, ClienteID (En ese ORDEN!). Si no te funciona podemos
probar otras alternativas.
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
anonymous escribio:
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
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida