Re: [pgsql-es-ayuda] Consulta no usa los indices
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
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
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
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
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
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
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
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
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
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
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
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