Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group