Re: [pgsql-es-ayuda] Consulta no usa los indices

2014-03-14 Por tema Gilberto Castillo


 Hola lista.

 Tengo la siguiente consulta:

  SELECT
 tarifa.consecutivo AS tarifa,
 caracteristica_predio_oi_predio.oi_predio
FROM tarifa
 JOIN caracteristica_predio_tarifa ON
 caracteristica_predio_tarifa.tarifa::text = tarifa.consecutivo::text

  JOIN caracteristica_predio_oi_predio ON
 caracteristica_predio_oi_predio.caracteristica_predio::text =
 caracteristica_predio_tarifa.caracteristica_predio::text
 AND caracteristica_predio_oi_predio.estado::text = 'ACTIVO'::text
  AND (caracteristica_predio_oi_predio.vigencia::text = ''::text OR
 caracteristica_predio_oi_predio.vigencia IS NULL OR
  caracteristica_predio_oi_predio.vigencia::text = tarifa.vigencia::text)

   WHERE tarifa.estado::text = 'ACTIVO'::text


 Y a las tablas le cree los siguientes indices:

 CREATE INDEX tarifa_estado_ix
ON tarifa USING btree (estado ASC NULLS LAST);

 CREATE INDEX caracteristica_predio_oi_predio_estado_ix
ON caracteristica_predio_oi_predio USING btree (estado ASC NULLS LAST);

 CREATE INDEX caracteristica_predio_oi_predio_caracteristica_predio_ix
ON caracteristica_predio_oi_predio USING btree (caracteristica_predio
 ASC NULLS LAST);

 CREATE INDEX caracteristica_predio_oi_predio_vigencia_ix
ON caracteristica_predio_oi_predio USING btree (vigencia ASC NULLS
 LAST);

 CREATE INDEX caracteristica_predio_oi_predio_vigencia_estado_ix
ON caracteristica_predio_oi_predio USING btree (vigencia, estado);


 Pero haciendo un explain no los toma:

 Hash Join  (cost=62.82..2455.25 rows=102826 width=11)
   Output: tarifa.consecutivo, caracteristica_predio_oi_predio.oi_predio
   Hash Cond:
 ((caracteristica_predio_oi_predio.caracteristica_predio)::text =
 (caracteristica_predio_tarifa.caracteristica_predio)::text)
   Join Filter: (((caracteristica_predio_oi_predio.vigencia)::text =
 ''::text) OR (caracteristica_predio_oi_predio.vigencia IS NULL) OR
 ((caracteristica_predio_oi_predio.vigencia)::text =
 (tarifa.vigencia)::text))
   -  Seq Scan on caracteristica_predio_oi_predio  (cost=0.00..162.44
 rows=8595 width=29)
 Output: caracteristica_predio_oi_predio.consecutivo,
 caracteristica_predio_oi_predio.caracteristica_predio,
 caracteristica_predio_oi_predio.oi_predio,
 caracteristica_predio_oi_predio.vigencia,
 caracteristica_predio_oi_predio.estado
 Filter: ((estado)::text = 'ACTIVO'::text)
   -  Hash  (cost=59.97..59.97 rows=228 width=13)
 Output: tarifa.consecutivo, tarifa.vigencia,
 caracteristica_predio_tarifa.caracteristica_predio
 -  Hash Join  (cost=7.13..59.97 rows=228 width=13)
   Output: tarifa.consecutivo, tarifa.vigencia,
 caracteristica_predio_tarifa.caracteristica_predio
   Hash Cond: ((tarifa.consecutivo)::text =
 (caracteristica_predio_tarifa.tarifa)::text)
   -  Seq Scan on tarifa  (cost=0.00..44.66 rows=1573
 width=10)
 Output: tarifa.consecutivo, tarifa.avaluo_inicial,
 tarifa.avaluo_final, tarifa.destino_economico, tarifa.tipo_predio,
 tarifa.tarifa, tarifa.estado, tarifa.area_construida_inicial,
 tarifa.area_construida_final, tarifa.area_terreno_inicial,
 tarifa.area_terreno_final, tarifa.estrato, tarifa.tipo,
 tarifa.fecha_cambio, tarifa.registrado_por, tarifa.fecha_creacion,
 tarifa.usuario_creacion, tarifa.vigencia,
 tarifa.porcentaje_limite_incremento, tarifa.uso_predio
 Filter: ((estado)::text = 'ACTIVO'::text)
   -  Hash  (cost=4.28..4.28 rows=228 width=8)
 Output: caracteristica_predio_tarifa.tarifa,
 caracteristica_predio_tarifa.caracteristica_predio
 -  Seq Scan on caracteristica_predio_tarifa
  (cost=0.00..4.28 rows=228 width=8)
   Output: caracteristica_predio_tarifa.tarifa,
 caracteristica_predio_tarifa.caracteristica_predio


 Que puedo hacer para que la consulta sea más rápida?

Varias cosas, solo necesitamos más detalles de tu problema para poder
ayudarte.

Saludos,
Gilberto Castillo
La Habana, Cuba
--- 
This message was processed by Kaspersky Mail Gateway 5.6.28/RELEASE running at 
host imx3.etecsa.cu
Visit our web-site: http://www.kaspersky.com, http://www.viruslist.com
-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda


Re: [pgsql-es-ayuda] Consulta no usa los indices

2014-03-14 Por tema Alvaro Herrera
William Diaz Pabón escribió:

  SELECT
 tarifa.consecutivo AS tarifa,
 caracteristica_predio_oi_predio.oi_predio
FROM tarifa
 JOIN caracteristica_predio_tarifa ON
 caracteristica_predio_tarifa.tarifa::text = tarifa.consecutivo::text
 
  JOIN caracteristica_predio_oi_predio ON
 caracteristica_predio_oi_predio.caracteristica_predio::text =
 caracteristica_predio_tarifa.caracteristica_predio::text
 AND caracteristica_predio_oi_predio.estado::text = 'ACTIVO'::text
  AND (caracteristica_predio_oi_predio.vigencia::text = ''::text OR
 caracteristica_predio_oi_predio.vigencia IS NULL OR
  caracteristica_predio_oi_predio.vigencia::text = tarifa.vigencia::text)
 
   WHERE tarifa.estado::text = 'ACTIVO'::text

Me imagino que la mayoría de los predios están en estado ACTIVO, ¿es
así?

PD: usa aliases en la cláusula FROM para que tus consultas sean más legibles.
  FROM tarifa AS t JOIN ...
En la ensalada de letras de arriba es difícil hasta saber cuántas tablas
están involucradas.

-- 
Álvaro Herrerahttp://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training  Services

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda


Re: [pgsql-es-ayuda] Consulta no usa los indices

2014-03-14 Por tema William Diaz Pabón
Ok, gracias.

Esta es la consulta con alias, espero que sea más legible:


 SELECT
t.consecutivo AS tarifa,
 cpp.oi_predio
   FROM tarifa AS t
JOIN caracteristica_predio_tarifa AS cpt ON cpt.tarifa::text =
t.consecutivo::text

JOIN caracteristica_predio_oi_predio AS cpp ON
cpp.caracteristica_predio::text = cpt.caracteristica_predio::text
AND cpp.estado::text = 'ACTIVO'::text
 AND (cpp.vigencia::text = ''::text OR
cpp.vigencia IS NULL OR
cpp.vigencia::text = t.vigencia::text)
  WHERE t.estado::text = 'ACTIVO'::text

El problema es que al ejecutar la consulta de demora mucho, y le pude los
indices que indique en el correo anterior, pero haciendo un explain no los
esta tomando y no se porque.

Para la pregunta de Alvaro: Me imagino que la mayoría de los predios están
en estado ACTIVO, ¿es así?

Pueden haber registros activos e inactivos, pero la gran mayoría debería
ser activos.


El 14 de marzo de 2014, 10:38, Alvaro Herrera
alvhe...@2ndquadrant.comescribió:

 William Diaz Pabón escribió:

   SELECT
  tarifa.consecutivo AS tarifa,
  caracteristica_predio_oi_predio.oi_predio
 FROM tarifa
  JOIN caracteristica_predio_tarifa ON
  caracteristica_predio_tarifa.tarifa::text = tarifa.consecutivo::text
 
   JOIN caracteristica_predio_oi_predio ON
  caracteristica_predio_oi_predio.caracteristica_predio::text =
  caracteristica_predio_tarifa.caracteristica_predio::text
  AND caracteristica_predio_oi_predio.estado::text = 'ACTIVO'::text
   AND (caracteristica_predio_oi_predio.vigencia::text = ''::text OR
  caracteristica_predio_oi_predio.vigencia IS NULL OR
   caracteristica_predio_oi_predio.vigencia::text = tarifa.vigencia::text)
 
WHERE tarifa.estado::text = 'ACTIVO'::text

 Me imagino que la mayoría de los predios están en estado ACTIVO, ¿es
 así?

 PD: usa aliases en la cláusula FROM para que tus consultas sean más
 legibles.
   FROM tarifa AS t JOIN ...
 En la ensalada de letras de arriba es difícil hasta saber cuántas tablas
 están involucradas.

 --
 Álvaro Herrerahttp://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/


Re: [pgsql-es-ayuda] Consulta no usa los indices

2014-03-14 Por tema Gilberto Castillo


 Ok, gracias.

 Esta es la consulta con alias, espero que sea más legible:


  SELECT
 t.consecutivo AS tarifa,
  cpp.oi_predio
FROM tarifa AS t
 JOIN caracteristica_predio_tarifa AS cpt ON cpt.tarifa::text =
 t.consecutivo::text

 JOIN caracteristica_predio_oi_predio AS cpp ON
 cpp.caracteristica_predio::text = cpt.caracteristica_predio::text
 AND cpp.estado::text = 'ACTIVO'::text
  AND (cpp.vigencia::text = ''::text OR
 cpp.vigencia IS NULL OR
 cpp.vigencia::text = t.vigencia::text)
   WHERE t.estado::text = 'ACTIVO'::text

 El problema es que al ejecutar la consulta de demora mucho, y le pude los
 indices que indique en el correo anterior, pero haciendo un explain no los
 esta tomando y no se porque.

 Para la pregunta de Alvaro: Me imagino que la mayoría de los predios están
 en estado ACTIVO, ¿es así?

 Pueden haber registros activos e inactivos, pero la gran mayoría debería
 ser activos.

Si es, así de muy poco sirven los índices al final debe recorre toda la
tabla para obtener los resultados.

Saludos,
Gilberto Castillo
La Habana, Cuba
--- 
This message was processed by Kaspersky Mail Gateway 5.6.28/RELEASE running at 
host imx3.etecsa.cu
Visit our web-site: http://www.kaspersky.com, http://www.viruslist.com
-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda


Re: [pgsql-es-ayuda] Consulta no usa los indices

2014-03-14 Por tema raul andrez gutierrez alejo
Cordial saludo William.

recomiendo ejecute varias veces la consulta para cargar en cache el
resultado, si en cache la consulta es rápida puede ser problema de lentitud
de disco duro, si la consulta sigue siendo lenta puede ser problema del
planificador, el planificador de postgres no se puede manipular
directamente, si puedes aumentar el costo de escaneo secuencial con  set
seq_page_cost = valor, tambien puede aumentar la muestra de la tabla con
ALTER TABLE tabla
   ALTER COLUMN campo SET STATISTICS valor; o puede evitar que el
planificado use escaneo secuencia con  SET ENABLE_SEQSCAN = OFF; SELECT ***
, igualmente es mejor es explain analyze.

para leerlo es asi:
Seq Scan on tblrec  (cost=0.00..374.82 rows=13482 width=188) (actual
time=11.660..44.122 rows=13482 loops=1)

Seq Scan on tblrec  (planificado) (real)
planificado: (cost=0.00..374.82 rows=13482 width=188)
el primer registro lo trae en 0.00ms el ultimo en 974.82ms retorna 13482
registros width= no se
real: ( time=11.660..44.122 rows=13482 loops=1)
el primer registro lo traen en 11.66ms, el ultimo en 44.122 retorna 13482
registros y solo recorre una vez la tabla.

si planificado.rows es muy diferente de real.rows debe modificar el
STATISTICS del campo.

también puede usar http://explain.depesz.com esta pagina muestra en rojo lo
mas pesado de la consulta.
empieza probando  SET ENABLE_SEQSCAN = OFF; al inicio del sql.





2014-03-14 10:29 GMT-05:00 William Diaz Pabón wid...@gmail.com:

 Hola lista.

 Tengo la siguiente consulta:

  SELECT
 tarifa.consecutivo AS tarifa,
 caracteristica_predio_oi_predio.oi_predio
FROM tarifa
 JOIN caracteristica_predio_tarifa ON
 caracteristica_predio_tarifa.tarifa::text = tarifa.consecutivo::text

  JOIN caracteristica_predio_oi_predio ON
 caracteristica_predio_oi_predio.caracteristica_predio::text =
 caracteristica_predio_tarifa.caracteristica_predio::text
 AND caracteristica_predio_oi_predio.estado::text = 'ACTIVO'::text
  AND (caracteristica_predio_oi_predio.vigencia::text = ''::text OR
 caracteristica_predio_oi_predio.vigencia IS NULL OR
  caracteristica_predio_oi_predio.vigencia::text = tarifa.vigencia::text)

   WHERE tarifa.estado::text = 'ACTIVO'::text


 Y a las tablas le cree los siguientes indices:

 CREATE INDEX tarifa_estado_ix
ON tarifa USING btree (estado ASC NULLS LAST);

 CREATE INDEX caracteristica_predio_oi_predio_estado_ix
ON caracteristica_predio_oi_predio USING btree (estado ASC NULLS LAST);

 CREATE INDEX caracteristica_predio_oi_predio_caracteristica_predio_ix
ON caracteristica_predio_oi_predio USING btree (caracteristica_predio
 ASC NULLS LAST);

 CREATE INDEX caracteristica_predio_oi_predio_vigencia_ix
ON caracteristica_predio_oi_predio USING btree (vigencia ASC NULLS
 LAST);

 CREATE INDEX caracteristica_predio_oi_predio_vigencia_estado_ix
ON caracteristica_predio_oi_predio USING btree (vigencia, estado);


 Pero haciendo un explain no los toma:

 Hash Join  (cost=62.82..2455.25 rows=102826 width=11)
   Output: tarifa.consecutivo, caracteristica_predio_oi_predio.oi_predio
   Hash Cond:
 ((caracteristica_predio_oi_predio.caracteristica_predio)::text =
 (caracteristica_predio_tarifa.caracteristica_predio)::text)
   Join Filter: (((caracteristica_predio_oi_predio.vigencia)::text =
 ''::text) OR (caracteristica_predio_oi_predio.vigencia IS NULL) OR
 ((caracteristica_predio_oi_predio.vigencia)::text =
 (tarifa.vigencia)::text))
   -  Seq Scan on caracteristica_predio_oi_predio  (cost=0.00..162.44
 rows=8595 width=29)
 Output: caracteristica_predio_oi_predio.consecutivo,
 caracteristica_predio_oi_predio.caracteristica_predio,
 caracteristica_predio_oi_predio.oi_predio,
 caracteristica_predio_oi_predio.vigencia,
 caracteristica_predio_oi_predio.estado
 Filter: ((estado)::text = 'ACTIVO'::text)
   -  Hash  (cost=59.97..59.97 rows=228 width=13)
 Output: tarifa.consecutivo, tarifa.vigencia,
 caracteristica_predio_tarifa.caracteristica_predio
 -  Hash Join  (cost=7.13..59.97 rows=228 width=13)
   Output: tarifa.consecutivo, tarifa.vigencia,
 caracteristica_predio_tarifa.caracteristica_predio
   Hash Cond: ((tarifa.consecutivo)::text =
 (caracteristica_predio_tarifa.tarifa)::text)
   -  Seq Scan on tarifa  (cost=0.00..44.66 rows=1573
 width=10)
 Output: tarifa.consecutivo, tarifa.avaluo_inicial,
 tarifa.avaluo_final, tarifa.destino_economico, tarifa.tipo_predio,
 tarifa.tarifa, tarifa.estado, tarifa.area_construida_inicial,
 tarifa.area_construida_final, tarifa.area_terreno_inicial,
 tarifa.area_terreno_final, tarifa.estrato, tarifa.tipo,
 tarifa.fecha_cambio, tarifa.registrado_por, tarifa.fecha_creacion,
 tarifa.usuario_creacion, tarifa.vigencia,
 tarifa.porcentaje_limite_incremento, tarifa.uso_predio
 Filter: ((estado)::text = 'ACTIVO'::text)
   -  Hash  (cost=4.28..4.28 rows=228 width=8)
 Output: caracteristica_predio_tarifa.tarifa,
 

Re: [pgsql-es-ayuda] Consulta no usa los indices

2014-03-14 Por tema Hellmuth Vargas
Hola Lista

El hecho que se defina un indice sobre una columna no implica que este
siempre se empleara en una consulta, El optimizador de PostgreSQL se basa
en costos los cuales obtiene el Analizador generando entre otras variables
un histograma de la distribución de los valores  de las columnas,  si un
valor ( en este caso ACTIVO) corresponde a más del 20% aprox. de los
registros de una tabla, el optimizador  no optara por emplear el indice
sino realizar un full scan sobre la tabla.


El 14 de marzo de 2014, 10:45, William Diaz Pabónwid...@gmail.comescribió:

 Ok, gracias.

 Esta es la consulta con alias, espero que sea más legible:


  SELECT
 t.consecutivo AS tarifa,
  cpp.oi_predio
FROM tarifa AS t
 JOIN caracteristica_predio_tarifa AS cpt ON cpt.tarifa::text =
 t.consecutivo::text

 JOIN caracteristica_predio_oi_predio AS cpp ON
 cpp.caracteristica_predio::text = cpt.caracteristica_predio::text
 AND cpp.estado::text = 'ACTIVO'::text
  AND (cpp.vigencia::text = ''::text OR
 cpp.vigencia IS NULL OR
 cpp.vigencia::text = t.vigencia::text)
   WHERE t.estado::text = 'ACTIVO'::text

 El problema es que al ejecutar la consulta de demora mucho, y le pude los
 indices que indique en el correo anterior, pero haciendo un explain no los
 esta tomando y no se porque.

 Para la pregunta de Alvaro: Me imagino que la mayoría de los predios
 están en estado ACTIVO, ¿es así?

 Pueden haber registros activos e inactivos, pero la gran mayoría debería
 ser activos.


 El 14 de marzo de 2014, 10:38, Alvaro Herrera 
 alvhe...@2ndquadrant.comescribió:

 William Diaz Pabón escribió:

   SELECT
  tarifa.consecutivo AS tarifa,
  caracteristica_predio_oi_predio.oi_predio
 FROM tarifa
  JOIN caracteristica_predio_tarifa ON
  caracteristica_predio_tarifa.tarifa::text = tarifa.consecutivo::text
 
   JOIN caracteristica_predio_oi_predio ON
  caracteristica_predio_oi_predio.caracteristica_predio::text =
  caracteristica_predio_tarifa.caracteristica_predio::text
  AND caracteristica_predio_oi_predio.estado::text = 'ACTIVO'::text
   AND (caracteristica_predio_oi_predio.vigencia::text = ''::text OR
  caracteristica_predio_oi_predio.vigencia IS NULL OR
   caracteristica_predio_oi_predio.vigencia::text = tarifa.vigencia::text)
 
WHERE tarifa.estado::text = 'ACTIVO'::text

 Me imagino que la mayoría de los predios están en estado ACTIVO, ¿es
 así?

 PD: usa aliases en la cláusula FROM para que tus consultas sean más
 legibles.
   FROM tarifa AS t JOIN ...
 En la ensalada de letras de arriba es difícil hasta saber cuántas tablas
 están involucradas.

 --
 Álvaro Herrerahttp://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/




-- 
Cordialmente,

Ing. Hellmuth I. Vargas S.
Esp. Telemática y Negocios por Internet
Oracle Database 10g Administrator Certified Associate
PostgreSQL DBA


Re: [pgsql-es-ayuda] Consulta no usa los indices

2014-03-14 Por tema Alvaro Herrera
William Diaz Pabón escribió:
 Ok, gracias.
 
 Esta es la consulta con alias, espero que sea más legible:
 
 
  SELECT
 t.consecutivo AS tarifa,
  cpp.oi_predio
FROM tarifa AS t
 JOIN caracteristica_predio_tarifa AS cpt ON cpt.tarifa::text =
 t.consecutivo::text
 
 JOIN caracteristica_predio_oi_predio AS cpp ON
 cpp.caracteristica_predio::text = cpt.caracteristica_predio::text
 AND cpp.estado::text = 'ACTIVO'::text
  AND (cpp.vigencia::text = ''::text OR
 cpp.vigencia IS NULL OR
 cpp.vigencia::text = t.vigencia::text)
   WHERE t.estado::text = 'ACTIVO'::text

Sí, es mucho más legible.  ¿Puedes mandar un EXPLAIN ANALYZE de la
consulta?

-- 
Álvaro Herrerahttp://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training  Services

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda


Re: [pgsql-es-ayuda] Consulta no usa los indices

2014-03-14 Por tema William Diaz Pabón
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



El 14 de marzo de 2014, 11:02, Alvaro Herrera
alvhe...@2ndquadrant.comescribió:

 William Diaz Pabón escribió:
  Ok, gracias.
 
  Esta es la consulta con alias, espero que sea más legible:
 
 
   SELECT
  t.consecutivo AS tarifa,
   cpp.oi_predio
 FROM tarifa AS t
  JOIN caracteristica_predio_tarifa AS cpt ON cpt.tarifa::text =
  t.consecutivo::text
 
  JOIN caracteristica_predio_oi_predio AS cpp ON
  cpp.caracteristica_predio::text = cpt.caracteristica_predio::text
  AND cpp.estado::text = 'ACTIVO'::text
   AND (cpp.vigencia::text = ''::text OR
  cpp.vigencia IS NULL OR
  cpp.vigencia::text = t.vigencia::text)
WHERE t.estado::text = 'ACTIVO'::text

 Sí, es mucho más legible.  ¿Puedes mandar un EXPLAIN ANALYZE de la
 consulta?

 --
 Álvaro Herrerahttp://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/


Re: [pgsql-es-ayuda] Consulta no usa los indices

2014-03-14 Por tema raul andrez gutierrez alejo
el proeblema no es (estado)::text = 'ACTIVO'::text), es Hash Cond:
((cpp.caracteristica_predio)::text = (cpt.caracteristica_predio)::text)

http://explain.depesz.com/s/1GRQ


El 14 de marzo de 2014, 11:04, William Diaz Pabón wid...@gmail.comescribió:

 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



 El 14 de marzo de 2014, 11:02, Alvaro Herrera 
 alvhe...@2ndquadrant.comescribió:

 William Diaz Pabón escribió:
  Ok, gracias.
 
  Esta es la consulta con alias, espero que sea más legible:
 
 
   SELECT
  t.consecutivo AS tarifa,
   cpp.oi_predio
 FROM tarifa AS t
  JOIN caracteristica_predio_tarifa AS cpt ON cpt.tarifa::text =
  t.consecutivo::text
 
  JOIN caracteristica_predio_oi_predio AS cpp ON
  cpp.caracteristica_predio::text = cpt.caracteristica_predio::text
  AND cpp.estado::text = 'ACTIVO'::text
   AND (cpp.vigencia::text = ''::text OR
  cpp.vigencia IS NULL OR
  cpp.vigencia::text = t.vigencia::text)
WHERE t.estado::text = 'ACTIVO'::text

 Sí, es mucho más legible.  ¿Puedes mandar un EXPLAIN ANALYZE de la
 consulta?

 --
 Álvaro Herrerahttp://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/




-- 
Raul Andres Gutierrez Alejo


Re: [pgsql-es-ayuda] Consulta no usa los indices

2014-03-14 Por tema William Diaz Pabón
Raul, de la pagina que me pasaste, que significa el
exclusivehttp://explain.depesz.com/s/1GRQ#colorize-exclusive
inclusive http://explain.depesz.com/s/1GRQ#colorize-inclusive


2014-03-14 11:09 GMT-05:00 raul andrez gutierrez alejo rauland...@gmail.com
:

 el proeblema no es (estado)::text = 'ACTIVO'::text), es Hash Cond:
 ((cpp.caracteristica_predio)::text = (cpt.caracteristica_predio)::text)

 http://explain.depesz.com/s/1GRQ


 El 14 de marzo de 2014, 11:04, William Diaz Pabón wid...@gmail.comescribió:

 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



 El 14 de marzo de 2014, 11:02, Alvaro Herrera 
 alvhe...@2ndquadrant.comescribió:

 William Diaz Pabón escribió:
  Ok, gracias.
 
  Esta es la consulta con alias, espero que sea más legible:
 
 
   SELECT
  t.consecutivo AS tarifa,
   cpp.oi_predio
 FROM tarifa AS t
  JOIN caracteristica_predio_tarifa AS cpt ON cpt.tarifa::text =
  t.consecutivo::text
 
  JOIN caracteristica_predio_oi_predio AS cpp ON
  cpp.caracteristica_predio::text = cpt.caracteristica_predio::text
  AND cpp.estado::text = 'ACTIVO'::text
   AND (cpp.vigencia::text = ''::text OR
  cpp.vigencia IS NULL OR
  cpp.vigencia::text = t.vigencia::text)
WHERE t.estado::text = 'ACTIVO'::text

 Sí, es mucho más legible.  ¿Puedes mandar un EXPLAIN ANALYZE de la
 consulta?

 --
 Álvaro Herrerahttp://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/




 --
 Raul Andres Gutierrez Alejo




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


Re: [pgsql-es-ayuda] Consulta no usa los indices

2014-03-14 Por tema Alvaro Herrera
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 Herrerahttp://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training  Services

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda


Re: [pgsql-es-ayuda] Consulta no usa los indices

2014-03-14 Por tema raul andrez gutierrez alejo
exclusive es el tiempo en que retorna el primer dato, inclusive el el
tiempo en que retorna el ultimo dato.


2014-03-14 11:18 GMT-05:00 William Diaz Pabón wid...@gmail.com:

 Raul, de la pagina que me pasaste, que significa el   
 exclusivehttp://explain.depesz.com/s/1GRQ#colorize-exclusive
 inclusive http://explain.depesz.com/s/1GRQ#colorize-inclusive


 2014-03-14 11:09 GMT-05:00 raul andrez gutierrez alejo 
 rauland...@gmail.com:

 el proeblema no es (estado)::text = 'ACTIVO'::text), es Hash Cond:
 ((cpp.caracteristica_predio)::text = (cpt.caracteristica_predio)::text)

 http://explain.depesz.com/s/1GRQ


 El 14 de marzo de 2014, 11:04, William Diaz Pabón wid...@gmail.comescribió:

 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



 El 14 de marzo de 2014, 11:02, Alvaro Herrera 
 alvhe...@2ndquadrant.comescribió:

 William Diaz Pabón escribió:
  Ok, gracias.
 
  Esta es la consulta con alias, espero que sea más legible:
 
 
   SELECT
  t.consecutivo AS tarifa,
   cpp.oi_predio
 FROM tarifa AS t
  JOIN caracteristica_predio_tarifa AS cpt ON cpt.tarifa::text =
  t.consecutivo::text
 
  JOIN caracteristica_predio_oi_predio AS cpp ON
  cpp.caracteristica_predio::text = cpt.caracteristica_predio::text
  AND cpp.estado::text = 'ACTIVO'::text
   AND (cpp.vigencia::text = ''::text OR
  cpp.vigencia IS NULL OR
  cpp.vigencia::text = t.vigencia::text)
WHERE t.estado::text = 'ACTIVO'::text

 Sí, es mucho más legible.  ¿Puedes mandar un EXPLAIN ANALYZE de la
 consulta?

 --
 Álvaro Herrerahttp://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/




 --
 Raul Andres Gutierrez Alejo




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




-- 
Raul Andres Gutierrez Alejo