Fwd: Consulta no usa los indices

From: William Diaz Pabón <widipa(at)gmail(dot)com>
To: PostgreSQL Español Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Fwd: Consulta no usa los indices
Date: 2014-03-14 16:25:34
Message-ID: CAGrLqMZPFJWoyNkA80hA-m0VonvGjhTX9xq0aRGrohO-Zo5wzA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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 <alvherre(at)2ndquadrant(dot)com>:

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/

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2014-03-14 16:29:50 Re: Fwd: Consulta no usa los indices
Previous Message William Diaz Pabón 2014-03-14 16:18:45 Re: Consulta no usa los indices