Query demasiado lento con select anidados
Publicado por Ariel Mendieta (2 intervenciones) el 06/07/2007 20:51:31
Buenas, realmente tengo una muy mala performance con el siguiente query:
Tengo dos bases una de ellas llamada c_cabezal(cliente_id, fecha, nro_doc, moneda_id, total) y la otra llamada g_cotiza(moneda_id, fecha, cotizacion) que la misma responde a una tabla de cotizaciones de las monedas. Ahora esta tabla puede actualizarse eventualmente, por lo que para saber la cotización de la moneda de una determinada fecha, busca la siguiente fecha menor a la solicitada.
Por lo tanto, quiero hacer una consulta en la cual para un mes me acumule los totales por cliente de los documentos aplicándole el tipo de cambio correspondiente.
select sum ( case when a.moneda = 2 then ( a.total_doc * c.cotizacion )
else a.total_doc end )
from c_cabezl as "a", g_cotiza as "c"
where a.cod_prov = 10
and month( a.fecha ) = 6
and year( a.fecha ) = 2007
and c.moneda_id = 2
and c.fecha = ( select max(g.fecha) from g_cotiza as "g"
where g.fecha <= a.fecha_doc
and moneda_id = 2 )
y realmente la misma funciona pero tiene una lentitud tremenda. Quisiera saber si alguien me puede ayudar a mejorar los tiempos de esta consulta.
Gracias desde ya
Salu2
ARIEL
Tengo dos bases una de ellas llamada c_cabezal(cliente_id, fecha, nro_doc, moneda_id, total) y la otra llamada g_cotiza(moneda_id, fecha, cotizacion) que la misma responde a una tabla de cotizaciones de las monedas. Ahora esta tabla puede actualizarse eventualmente, por lo que para saber la cotización de la moneda de una determinada fecha, busca la siguiente fecha menor a la solicitada.
Por lo tanto, quiero hacer una consulta en la cual para un mes me acumule los totales por cliente de los documentos aplicándole el tipo de cambio correspondiente.
select sum ( case when a.moneda = 2 then ( a.total_doc * c.cotizacion )
else a.total_doc end )
from c_cabezl as "a", g_cotiza as "c"
where a.cod_prov = 10
and month( a.fecha ) = 6
and year( a.fecha ) = 2007
and c.moneda_id = 2
and c.fecha = ( select max(g.fecha) from g_cotiza as "g"
where g.fecha <= a.fecha_doc
and moneda_id = 2 )
y realmente la misma funciona pero tiene una lentitud tremenda. Quisiera saber si alguien me puede ayudar a mejorar los tiempos de esta consulta.
Gracias desde ya
Salu2
ARIEL
Valora esta pregunta


0