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/
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 |