Re: Ayuda para optimizar consulta

From: "Gilberto Castillo" <gilberto(dot)castillo(at)etecsa(dot)cu>
To: "Guillermo E(dot) Villanueva" <guillermovil(at)gmail(dot)com>
Cc: "pgsql-es-ayuda" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Ayuda para optimizar consulta
Date: 2015-05-06 16:56:10
Message-ID: 41345.192.168.207.54.1430931370.squirrel@webmail.etecsa.cu
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

> Amigos los molesto para pedirles si me pueden ayudar a optimizar la
> siguiente consulta:
>
> SELECT
> uploaddet_importcomp.indice,
> historicotemp.clavebeneficiario,
> historicotemp.activo
> FROM
> uploaddet_importcomp left join nacer.historicotemp on
> uploaddet_importcomp.fil_clasedoc = historicotemp.aficlasedoc AND
> uploaddet_importcomp.fil_tipodoc = historicotemp.afitipodoc AND
> uploaddet_importcomp.fil_nrodoc = historicotemp.afidni AND
> uploaddet_importcomp.fil_nacim::date = historicotemp.afifechanac::date
> WHERE
> uploaddet_importcomp.estado='S' and
> date_trunc('month', uploaddet_importcomp.pres_fecha::date) =
> historicotemp.periodo
>
> El explain me dice:
>
> "Merge Join (cost=2986610.29..3321028.99 rows=1 width=22)"
> " Merge Cond: (((historicotemp.afidni)::text =
> uploaddet_importcomp.fil_nrodoc) AND (((historicotemp.aficlasedoc)::text)
> =
> uploaddet_importcomp.fil_clasedoc) AND ((historicotemp.afitipodoc)::text =
> uploaddet_importcomp.fil_tipodoc) AND (((historicotemp.afi (...)"
> " -> Sort (cost=2933436.44..2957517.55 rows=9632444 width=47)"
> " Sort Key: historicotemp.afidni,
> ((historicotemp.aficlasedoc)::text), historicotemp.afitipodoc,
> ((historicotemp.afifechanac)::date), historicotemp.periodo"
> " -> Seq Scan on historicotemp (cost=0.00..630844.44 rows=9632444
> width=47)"
> " -> Materialize (cost=49759.11..50258.96 rows=99970 width=40)"
> " -> Sort (cost=49759.11..50009.04 rows=99970 width=40)"
> " Sort Key: uploaddet_importcomp.fil_nrodoc,
> uploaddet_importcomp.fil_clasedoc, uploaddet_importcomp.fil_tipodoc,
> ((uploaddet_importcomp.fil_nacim)::date), (date_trunc('month'::text,
> ((uploaddet_importcomp.pres_fecha)::date)::timestamp with tim (...)"
> " -> Seq Scan on uploaddet_importcomp (cost=0.00..38720.00
> rows=99970 width=40)"
> " Filter: (estado = 'S'::text)"
>
> Tengo índices por
> uploaddet_importcomp.estado
> historicotemp.dni
>
> Puedo crear mas índice si es necesario, la historicotemp (que es muy
> grande) se actualiza solo una vez al mes
>
> Desde ya agradezco la orientación que me puedan dar.
>
> Un abrazo

¿Haces mucho esta comparaciones uploaddet_importcomp.fil_clasedoc =
historicotemp.aficlasedoc?

Si la respuesta es "SI", crea índice en esos campos

¿Alguna razón para no definir este campo
uploaddet_importcomp.fil_nacim::date como date?

¿Es un índice parcial uploaddet_importcomp.estado?

Saludos,
Gilberto Castillo
ETECSA, La Habana, Cuba

Attachment Content-Type Size
unknown_filename text/plain 179 bytes
unknown_filename text/plain 157 bytes

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Gilberto Castillo 2015-05-06 16:58:53 Re: retornar varios resultados de consultas
Previous Message Freddy Martinez Garcia 2015-05-06 16:09:37 Re: retornar varios resultados de consultas