Re: Consulta Eficiente

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Rafa Comino <rafacomino(at)gmail(dot)com>
Cc: postgres Emanuel CALVO FRANCO <postgres(dot)arg(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Consulta Eficiente
Date: 2008-10-17 14:52:55
Message-ID: 20081017145255.GF4218@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Rafa Comino escribió:

> curpet CURSOR (fechaI DATE, fechaF DATE) FOR
> SELECT isbn, identidad, idpeticion, fechapeticion
> FROM peticiones
> WHERE fechapeticion >= fechaI
> AND fechapeticion <= fechaF
> AND tipopeticion = 'PC'
> AND completa = true
> ORDER BY fechapeticion;

> OPEN curpet(ldt_fini, ldt_ffin);
> -- Saco el primer registro
> FETCH curpet INTO lr_pet;
> WHILE FOUND LOOP
> IF ((SELECT COUNT(*) FROM log_peticiones WHERE isbn = lr_pet.isbn
> AND identidad = lr_pet.identidad AND tipopeticion='PC' AND fechapeticion >=
> ldt_fechanocobrar) > 0) THEN
> DELETE FROM peticiones WHERE idpeticion = lr_pet.idpeticion;

Hmm, esto debe ser lento como inyección de ulpo.

Creo que está mal planteada la forma de hacer esto. En lugar de ir una
por una con el cursor viendo el COUNT() de la otra tabla, deberías
reformular esto usando un EXISTS. Algo así como

delete from peticiones
where exists (select 1
from log_peticiones
where peticiones.identidad = identidad
and tipopeticion = 'PC'
and fechapeticion >= ldt_fechanocobrar)

> -- Elimino las peticiones repetidas mayores que la petición
> que estoy revisando
> DELETE FROM peticiones
> WHERE isbn = lr_pet.isbn
> AND identidad = lr_pet.identidad
> AND tipopeticion='PC'
> AND fechapeticion >= ldt_fini
> AND fechapeticion <= ldt_ffin
> AND fechapeticion > lr_pet.fechapeticion;
> END IF;

Acá algo semejante, creo.

--
Alvaro Herrera http://www.flickr.com/photos/alvherre/
Renaming ReiserFS to NinaFS is such an amazingly stupid suggestion, in so many
ways, that it ought to qualify for some kind of award. Or perhaps we should
name an award after it: the "NinaFS award" for outstanding crassness.
(edmundo, http://lwn.net/Articles/203846/)

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2008-10-17 15:01:36 Re: existen stored procedures?
Previous Message Alvaro Herrera 2008-10-17 14:46:31 Re: Consulta Eficiente