Re: Metodo mas rapido que Join ??? Solo una pregunta.

From: Gabriel Hermes Colina Zambra <hermeszambra(at)yahoo(dot)com>
To: Gabriel Hermes Colina Zambra <hermeszambra(at)yahoo(dot)com>, Alvaro Herrera <alvherre(at)commandprompt(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Metodo mas rapido que Join ??? Solo una pregunta.
Date: 2007-12-24 12:34:17
Message-ID: 411388.38230.qm@web63712.mail.re1.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


--- Gabriel Hermes Colina Zambra
<hermeszambra(at)yahoo(dot)com> escribió:

>
> --- Alvaro Herrera <alvherre(at)commandprompt(dot)com>
> escribió:
>
> > Gabriel Hermes Colina Zambra escribió:
> > >
> > > --- Alvaro Herrera <alvherre(at)commandprompt(dot)com>
> > > escribió:
> > >
> > > > Puedes mandar los explain analyze de ambas
> > formas?
> >
> > > Del primer ejemplo si por que este demora muy
> poco
> > > menos, algo asi como de 1.x a 0.9 ms de
> diferencia
> > >
> > > En el segundo ejemplo siempre aborte antes de
> que
> > me
> > > arrojara el resultado.
> >
> > Seguramente sería suficiente con mandar el EXPLAIN
> > ANALYZE del que se
> > tarda poco, y el EXPLAIN (sin analyze) del otro.
> >
> > --
> > Alvaro Herrera
> > http://www.CommandPrompt.com/
> > PostgreSQL Replication, Consulting, Custom
> > Development, 24x7 support
> > --
> > TIP 1: para suscribirte y desuscribirte, visita
> > http://archives.postgresql.org/pgsql-es-ayuda
> >
> Alvaro, desde ya gracias por tu preocupacion y la
> pauta que me diste sobre que el join deberia ser
> igual
> me dio a suponer que no estaba formulado de la mejor
> manera el join, aunque en sqlserver y access esta
> resuelto con esa formulacion en tiempos aceptables,
> reformule el join para que trabajara directo de las
> tablas en las que trabaja el otro metodo y la verdad
> quede impresionado de la mejora.
>
> Voy a presentar los tres casos en este mail para que
> algo que di por supuesto no le pase a otros en
> PostgreSQL y sirva documentar esto, aunque admito
> que
> la forma del join primario era muy rebuscada puesto
> que partia de views ya establecidos y en postgresql
> quiza sea la causa, lo presento por que quiza haya
> una
> pisada que se me escapa y termino desechando el
> tercero mas por ignorante que por razones firmes.
>
> El ultimo es el caso 3 en que se tarde del cual solo
> voy hacer un explain.
>
> Y el 2 con el join resuelto.
>
> El primer caso es el caso sin Join
>
> Caso 1
>
>
>
>
>
> QUERY PLAN
>
>
>
>
>
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> Nested Loop (cost=1124.28..1142.17 rows=1
> width=119)
> (actual time=3282.604..3894.373 rows=1389 loops=1)
> -> Nested Loop (cost=1124.28..1141.88 rows=1
> width=124) (actual time=3282.582..3863.924 rows=1754
> loops=1)
> Join Filter: (csituacion04.ultimo =
> track.trabajos_realizados.fecha)
> -> Nested Loop (cost=1124.28..1133.58
> rows=1 width=139) (actual time=3282.298..3562.269
> rows=1380 loops=1)
> -> Nested Loop
> (cost=1124.28..1132.89
> rows=1 width=100) (actual time=3282.271..3541.372
> rows=1380 loops=1)
> -> Nested Loop
> (cost=1124.28..1132.61 rows=1 width=53) (actual
> time=3282.237..3516.579 rows=1380 loops=1)
> Join Filter:
> (track.trabajos_realizados.fecha >=
> csituacion04.ultimo)
> -> HashAggregate
> (cost=1124.28..1124.30 rows=1 width=24) (actual
> time=3281.839..3285.776 rows=1117 loops=1)
> -> Nested Loop
> (cost=33.27..1124.27 rows=1 width=24) (actual
> time=0.879..3136.504 rows=33950 loops=1)
> -> Nested
> Loop
> (cost=33.27..1123.95 rows=1 width=28) (actual
> time=0.833..2532.927 rows=33950 loops=1)
> ->
> Nested Loop (cost=33.27..1123.63 rows=1 width=28)
> (actual time=0.787..1932.345 rows=33950 loops=1)
>
> ->
> Nested Loop (cost=33.27..1123.34 rows=1 width=24)
> (actual time=0.738..1295.976 rows=33950 loops=1)
>
>
> Join Filter:
> ((track.tipo_servicios.id_servicios)::text =
> (track.trabajos_realizados.id_servicio)::text)
>
>
> -> Nested Loop (cost=0.00..2.41 rows=1 width=12)
> (actual time=0.097..0.152 rows=4 loops=1)
>
>
> -> Seq Scan on categoria_servicio
> (cost=0.00..1.04 rows=1 width=4) (actual
> time=0.033..0.038 rows=1 loops=1)
>
>
> Filter: (id_categoria = 1)
>
>
> -> Seq Scan on tipo_servicios
> (cost=0.00..1.36 rows=1 width=12) (actual
> time=0.035..0.068 rows=4 loops=1)
>
>
> Filter: (1 = id_categoria)
>
>
> -> Hash Join (cost=33.27..1118.12 rows=225
> width=29) (actual time=0.071..237.724 rows=44965
> loops=4)
>
>
> Hash Cond:
> (track.trabajos_realizados.numero_aviso =
> avisos_categoria.ves)
>
>
> -> Seq Scan on trabajos_realizados
> (cost=0.00..913.89 rows=44989 width=29) (actual
> time=0.028..68.582 rows=44989 loops=4)
>
>
> -> Hash (cost=33.26..33.26 rows=1 width=8)
> (actual time=0.113..0.113 rows=1 loops=1)
>
>
> -> Hash Join (cost=1.09..33.26
> rows=1
> width=8) (actual time=0.096..0.103 rows=1 loops=1)
>
>
> Hash Cond:
> (avisos_categoria.id_avisos =
> mensajes_avisos.id_avisos)
>
>
> -> Seq Scan on avisos_categoria
>
> (cost=0.00..32.13 rows=9 width=12) (actual
> time=0.016..0.020 rows=1 loops=1)
>
>
> Filter: (1 = id_categoria)
>
>
> -> Hash (cost=1.04..1.04
> rows=4
> width=4) (actual time=0.046..0.046 rows=4 loops=1)
>
>
> -> Seq Scan on
> mensajes_avisos (cost=0.00..1.04 rows=4 width=4)
> (actual time=0.011..0.022 rows=4 loops=1)
>
> ->
> Index Scan using sectores_pkey on sectores
> (cost=0.00..0.27 rows=1 width=8) (actual
> time=0.009..0.010 rows=1 loops=33950)
>
>
> Index Cond: (sectores.id_sector =
> track.trabajos_realizados.id_sector)
> ->
> Index
> Scan using locales_pkey on locales (cost=0.00..0.31
> rows=1 width=8) (actual time=0.008..0.009 rows=1
> loops=33950)
>
>
=== message truncated ===
Por que el metodo 3 en postgresql es tan costos en
tiempo ?

Atte.
Gabriel Colina

____________________________________________________________________________________
¡Capacidad ilimitada de almacenamiento en tu correo!
No te preocupes más por el espacio de tu cuenta con Correo Yahoo!:
http://correo.espanol.yahoo.com/

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Gabriel Hermes Colina Zambra 2007-12-24 13:35:13 Re: duda con clave primaria
Previous Message Julio Cesar Sánchez González 2007-12-24 05:46:58 Re: duda con clave primaria