pues caracteristica_predio es una tabla tipo que solo contiene código y
nombre.

Modifique la consulta para hacer un join con esta tabla tipo y bajo un tris
acá dejo el EXPLAIN ANALYZE

Hash Join  (cost=67.34..1522.18 rows=115274 width=11) (actual
time=6.666..173.110 rows=100738 loops=1)
  Output: t.consecutivo, cpp.oi_predio
  Hash Cond: ((cpp.caracteristica_predio)::text =
(caracteristica_predio.codigo)::text)
  ->  Seq Scan on caracteristica_predio_oi_predio cpp  (cost=0.00..140.95
rows=8595 width=9) (actual time=0.013..11.160 rows=8595 loops=1)
         Output: cpp.consecutivo, cpp.caracteristica_predio, cpp.oi_predio,
cpp.vigencia, cpp.estado
  ->  Hash  (cost=64.49..64.49 rows=228 width=8) (actual
time=6.620..6.620rows=228 loops=1)
         Output: t.consecutivo, caracteristica_predio.codigo
        ->  Hash Join  (cost=8.51..64.49 rows=228 width=8) (actual
time=0.833..6.235 rows=228 loops=1)
              Output: t.consecutivo, caracteristica_predio.codigo
              Hash Cond: ((cpt.caracteristica_predio)::text =
(caracteristica_predio.codigo)::text)
              ->  Hash Join  (cost=7.13..59.97 rows=228 width=8) (actual
time=0.741..5.496 rows=228 loops=1)
                    Output: t.consecutivo, cpt.caracteristica_predio
                    Hash Cond: ((t.consecutivo)::text = (cpt.tarifa)::text)
                    ->  Seq Scan on tarifa t  (cost=0.00..44.66 rows=1573
width=5) (actual time=0.009..2.413 rows=1573 loops=1)
                           Output: t.consecutivo, t.avaluo_inicial,
t.avaluo_final, t.destino_economico, t.tipo_predio, t.tarifa, t.estado,
t.area_construida_inicial, t.area_construida_final, t.area_terreno_inicial,
t.area_terreno_final, t.estrato, t.tipo, t.fecha_cambio, t.registrado_por,
t.fecha_creacion, t.usuario_creacion, t.vigencia,
t.porcentaje_limite_incremento, t.uso_predio
                          Filter: ((estado)::text = 'ACTIVO'::text)
                    ->  Hash  (cost=4.28..4.28 rows=228 width=8) (actual
time=0.687..0.687 rows=228 loops=1)
                          Output: cpt.tarifa, cpt.caracteristica_predio
                          ->  Seq Scan on caracteristica_predio_tarifa cpt
 (cost=0.00..4.28 rows=228 width=8) (actual time=0.008..0.328 rows=228
loops=1)
                                Output: cpt.tarifa,
cpt.caracteristica_predio
              ->  Hash  (cost=1.17..1.17 rows=17 width=3) (actual
time=0.060..0.060 rows=17 loops=1)
                    Output: caracteristica_predio.codigo
                    ->  Seq Scan on caracteristica_predio  (cost=0.00..1.17
rows=17 width=3) (actual time=0.006..0.029 rows=17 loops=1)
                          Output: caracteristica_predio.codigo
Total runtime: 294.792 ms

en el último explain, le quite a la consulta las condiciones de estado y
vigencia para ver si era por el OR que demoraba tanto, pero no.

2014-03-14 11:17 GMT-05:00 Alvaro Herrera <[email protected]>:

William Diaz Pabón escribió:
> > Hash Join  (cost=62.82..2455.25 rows=102826 width=11) (actual
> time=6.006..186.428 rows=100738 loops=1)
> >   Output: t.consecutivo, cpp.oi_predio
> >   Hash Cond: ((cpp.caracteristica_predio)::text =
> (cpt.caracteristica_predio)::text)
> >   Join Filter: (((cpp.vigencia)::text = ''::text) OR (cpp.vigencia IS
> NULL) OR ((cpp.vigencia)::text = (t.vigencia)::text))
> >   ->  Seq Scan on caracteristica_predio_oi_predio cpp
>  (cost=0.00..162.44 rows=8595 width=29) (actual time=0.019..12.759
> rows=8595 loops=1)
> >         Output: cpp.consecutivo, cpp.caracteristica_predio,
> cpp.oi_predio, cpp.vigencia, cpp.estado
> >         Filter: ((estado)::text = 'ACTIVO'::text)
> >   ->  Hash  (cost=59.97..59.97 rows=228 width=13) (actual time=
> 5.970..5.970 rows=228 loops=1)
> >         Output: t.consecutivo, t.vigencia, cpt.caracteristica_predio
> >         ->  Hash Join  (cost=7.13..59.97 rows=228 width=13) (actual
> time=0.755..5.571 rows=228 loops=1)
> >               Output: t.consecutivo, t.vigencia,
> cpt.caracteristica_predio
> >               Hash Cond: ((t.consecutivo)::text = (cpt.tarifa)::text)
> >               ->  Seq Scan on tarifa t  (cost=0.00..44.66 rows=1573
> width=10) (actual time=0.006..2.402 rows=1573 loops=1)
> >                     Output: t.consecutivo, t.avaluo_inicial,
> t.avaluo_final, t.destino_economico, t.tipo_predio, t.tarifa, t.estado,
> t.area_construida_inicial, t.area_construida_final, t.area_terreno_inicial,
> t.area_terreno_final, t.estrato, t.tipo, t.fecha_cambio, t.registrado_por,
> t.fecha_creacion, t.usuario_creacion, t.vigencia,
> t.porcentaje_limite_incremento, t.uso_predio
> >                     Filter: ((estado)::text = 'ACTIVO'::text)
> >               ->  Hash  (cost=4.28..4.28 rows=228 width=8) (actual
> time=0.691..0.691 rows=228 loops=1)
> >                     Output: cpt.tarifa, cpt.caracteristica_predio
> >                     ->  Seq Scan on caracteristica_predio_tarifa cpt
> (cost=0.00..4.28 rows=228 width=8) (actual time=0.008..0.306 rows==228
> loops=1)
> >                           Output: cpt.tarifa, cpt.caracteristica_predio
> > Total runtime: 308.551 ms
>
> Uhm, ¿no te falta una condición de join entre cpt y cpp?  A menos que
> cada registro en cpt pueda tener válidamente más de un registro en cpp
> (según esto, en promedio hay 100738 / 8595 = 11,72).  En otras palabras
> yo había esperado intuitivamente que la salida fuera de 8595 registros.
>
> --
> Álvaro Herrera                http://www.2ndQuadrant.com/
> PostgreSQL Development, 24x7 Support, Training & Services
>



-- 
Éxitos.

Cordialmente,


*William Diaz Pabón*

*,  Especialista en Soluciones Informáticas*

  Bogotá, Colombia
Tel: +57 (300) 3917774

http://planetapleno.blogspot.com/
http://tutorialestecnicos.blogspot.com/



-- 
Éxitos.

Cordialmente,


*William Diaz Pabón*

*,  Especialista en Soluciones Informáticas*

 Bogotá, Colombia
Tel: +57 (300) 3917774

http://planetapleno.blogspot.com/
http://tutorialestecnicos.blogspot.com/

Responder a