Tengo un problema con una consulta en Firebird 1.52, tarda como 10 a 15 mins en generarmela y tengo en la tabla sólo 60,000 registros, el objetivo es de extraer aquellos clientes que han dejado de comprar en cierta sucursal en los últimos 4 meses, muestro la sentencia sql:
Código SQL
[-]
select s.sucursal,c.cliente,c.nomcli,c.rfccli,
Sum(c.importeant),Sum(c.importe) from TablaVentas c
join tesp_sucursales s on (s.clave = c.sucursal)
where
c.sucursal = 1 and
c.cliente >0 and
ano=2005 and
mes >= 1 and
mes < 6 and
c.cliente not in
(select cliente from TablaVentas
where
ano=2005 and
mes >= 6 and cliente = c.cliente)
group by s.sucursal,c.cliente,c.nomcli,c.rfccli
order by sum(c.importe) desc
*Tengo como PK los campos Sucursal+Cliente+Ano+Mes todos son de tipo Integer.
Realice varias pruebas entre ellas separar el Subselect y ejecutarlo por separado y se ejecutan al instante, pero por lo que veo si son 60,000 registros obviamente realiza 60,000 busquedas en el subselect es por eso el motivo de que tarda una eternidad, en la pc donde hago pruebas es una P4 con 256 MB en RAM y 20GB en Disco Duro, con WinXP Professional SPII.
Alguna sugerencia de optimizarla, se los agradecería muchisimo.