[Pgsql-ayuda] Maximo

Haroldo Stenger hstenger@adinet.com.uy
Sun, 23 Nov 2003 15:11:27 -0300


Hola Alvaro!

On Sun, 2003-11-23 at 12:53, Alvaro Herrera wrote:
> =BFQu=E9 tal las Jornadas de Software Libre?

Se realizaron, en general salieron bien.

>   Veo bastante gente con
> corbatas en las fotos ... creo que me sorprende un poco.=20

Puede ser, creo que este anho la idea era traer a gente del sector
empresarial y politico, para mostrales como el software libre les puede
cambiar la vida. De todos modos habiamos muchos geeks sin corbata.

>  No vi a Justin
> en el programa ... !?

No vino :-( y PostgreSQL quedo sin representante oficial. Una pena.=20

> > select hisprec.artcod,hisprec.precio
> > from
> >    (select hisprec.artcod as a, max(hisprec.fecha) as b
> >       from hisprec
> >       where hisprec.fecha<fecha_limite
> >       group by hisprec.artcod) as t,
> >    hisprec
> > where t.a=3Dhisprec.artcod and t.b=3Dhisprec.fecha ;
>=20
> Simp=E1tico ... es lo bueno de tener toda la potencia de la sintaxis SQL.
> La gente acostumbrada, por ej., a MySQL, no puede hacer estas cosas
> directamente.
>=20

Interesante.

> =BFViste el plan de ejecuci=F3n? (EXPLAIN ANALYZE)
>=20

Me da lo siguiente:
template1=3D# VACUUM FULL ANALYZE;
VACUUM
template1=3D# explain analyze select hisprec.artcod,hisprec.precio from (SE=
LECT hisprec.artcod as aaaa, max(hisprec.fecha) as bbbb from armov,hisprec =
where armov.artcod=3Dhisprec.artcod and hisprec.fecha<994801 group by hispr=
ec.artcod) as tttt,hisprec where tttt.aaaa=3Dhisprec.artcod and tttt.bbbb=
=3Dhisprec.fecha;
                                                                         QU=
ERY PLAN                                                                   =
                                                           =20
---------------------------------------------------------------------------=
---------------------------------------------------------------------------=
-------
 Merge Join  (cost=3D154263.52..156917.64 rows=3D354 width=3D82) (actual ti=
me=3D285354.25..314540.26 rows=3D5234 loops=3D1)
   Merge Cond: (("outer".bbbb =3D "inner".fecha) AND ("outer".aaaa =3D "inn=
er".artcod))
   ->  Sort  (cost=3D76814.90..76851.76 rows=3D14745 width=3D37) (actual ti=
me=3D97784.85..97873.22 rows=3D5227 loops=3D1)
         Sort Key: tttt.bbbb, tttt.aaaa
         ->  Subquery Scan tttt  (cost=3D70783.88..75793.97 rows=3D14745 wi=
dth=3D37) (actual time=3D83557.89..97319.74 rows=3D5227 loops=3D1)
               ->  Aggregate  (cost=3D70783.88..75793.97 rows=3D14745 width=
=3D37) (actual time=3D83557.87..97256.98 rows=3D5227 loops=3D1)            =
         ->  Group  (cost=3D70783.88..75425.34 rows=3D147450 width=3D37) (a=
ctual time=3D83539.24..96133.57 rows=3D102323 loops=3D1)
                           ->  Merge Join  (cost=3D70783.88..75056.72 rows=
=3D147450 width=3D37) (actual time=3D83539.21..94489.01 rows=3D102323 loops=
=3D1)
                                 Merge Cond: ("outer".artcod =3D "inner".ar=
tcod)
                                 ->  Sort  (cost=3D522.10..537.55 rows=3D61=
82 width=3D12) (actual time=3D323.59..344.31 rows=3D6182 loops=3D1)
                                       Sort Key: armov.artcod
                                       ->  Seq Scan on armov  (cost=3D0.00.=
.132.82 rows=3D6182 width=3D12) (actual time=3D0.04..63.79 rows=3D6182 loop=
s=3D1)
                                 ->  Sort  (cost=3D70261.79..71461.34 rows=
=3D479819 width=3D25) (actual time=3D83215.40..87728.95 rows=3D489789 loops=
=3D1)
                                       Sort Key: hisprec.artcod
                                       ->  Seq Scan on hisprec  (cost=3D0.0=
0..11755.73 rows=3D479819 width=3D25) (actual time=3D10.23..15221.32 rows=
=3D489789 loops=3D1)
                                             Filter: (fecha < 994801::numer=
ic)
   ->  Sort  (cost=3D77448.62..78736.16 rows=3D515018 width=3D37) (actual t=
ime=3D186434.33..200931.11 rows=3D489788 loops=3D1)
         Sort Key: hisprec.fecha, hisprec.artcod
         ->  Seq Scan on hisprec  (cost=3D0.00..10468.18 rows=3D515018 widt=
h=3D37) (actual time=3D51.17..16745.77 rows=3D515018 loops=3D1) Total runti=
me: 315395.15 msec
(20 rows)

hay algunos seqscans, no se como interpretarlos, si es "eficiente", o
no.

> Supongo que una alternativa ser=EDa crear tu propia funci=F3n de agregaci=
=F3n,
> pero francamente ignoro el nivel de dificultad que podr=EDa tener.  Por
> otra parte, =BFrealmente quieres buscar otra forma?  Recuerda, esto no es
> Perl, as=ED que basta con una forma de resolver el problema :-)
>=20

:-) buen apunte

> Quiz=E1s puedas hacer un "self join" sin necesidad de una subconsulta,
> pero en realidad no estoy seguro de si es posible.
>=20

hmmmm, self join es cuando pones una misma tabla mas de una vez en from
?

> > Que les parece? Que otros temas similares a este han encontrado?
>=20
> Hmm... yo tengo un sistema que usa harto SQL complejo, pero creo que es
> demasiado espec=EDfico para servir de ejemplo general :-(
> Lo malo es que el sistema genera parte de las consultas al vuelo, as=ED
> que extraerlas del c=F3digo es dif=EDcil ...

interesante! que hace tu sistema?

Gracias

Saludos
Haroldo