[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