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/

Responder a