Re: Consulta no usa los indices

From: raul andrez gutierrez alejo <raulandrez(at)gmail(dot)com>
To: William Diaz Pabón <widipa(at)gmail(dot)com>
Cc: PostgreSQL Español Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Consulta no usa los indices
Date: 2014-03-14 15:50:10
Message-ID: CAHQFj7000sGvk2C-bWp38u2SYTOmh7UbWnCyoY1p+Q_G=5i4WQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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 <widipa(at)gmail(dot)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,
> 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?
>
> --
> É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

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Hellmuth Vargas 2014-03-14 15:54:11 Re: Consulta no usa los indices
Previous Message William Diaz Pabón 2014-03-14 15:45:47 Re: Consulta no usa los indices