Explain de Consulta

From: "Luis Guevara" <luisguevaraa(at)hotmail(dot)com>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Explain de Consulta
Date: 2005-10-13 16:38:26
Message-ID: BAY107-DAV30F05F7F6DC2DC0F713F0DE7A0@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola amigos:

Tego la siguiente Consulta y necesito que me indiquen cual es la mejor manera de optimizarla.

select lpad(a.expe_id,8,'0') as expe_id,
to_char(b.expe_fecha,'dd-mm-yyyy') as expe_fecha,
c.texp_descripcion,lpad(b.expe_numero_doc,4,'0'),b.expe_siglas_doc as
expediente,
b.expe_fecha_doc,lpad(b.expe_folios,3,'0') as
expe_folios,d.depe_nombre as dependencia,
b.expe_depe_detalle,b.expe_firma,b.expe_cargo,b.expe_asunto
from operacion a
inner join expediente b on b.expe_id=a.expe_id
left join tipo_expediente c on c.texp_id=b.texp_id
left join dependencia d on d.depe_id=b.depe_id
where a.oper_fecha
BETWEEN '01/08/2005' and '31/10/2005'
and a.oper_idtope=1 and a.depe_id=10 and a.id_usu=155
group by a.expe_id,b.expe_fecha,c.texp_descripcion,
b.expe_numero_doc,b.expe_siglas_doc,
b.expe_fecha_doc,b.expe_folios,d.depe_nombre,
b.expe_depe_detalle,b.expe_firma,b.expe_cargo,b.expe_asunto

Su Explain es el siguiente:

QUERY PLAN
HashAggregate (cost=1086.02..1086.04 rows=1 width=586)
-> Nested Loop Left Join (cost=0.00..1085.99 rows=1 width=586)
-> Nested Loop Left Join (cost=0.00..1080.41 rows=1 width=532)
Join Filter: ("inner".texp_id = "outer".texp_id)
-> Nested Loop (cost=0.00..1078.69 rows=1 width=503)
-> Index Scan using operacion1 on operacion a
(cost=0.00..1072.67 rows=1 width=4)
Index Cond: (oper_idtope = 1::numeric)
Filter: ((oper_fecha >= '2005-08-01'::date)
AND (oper_fecha <= '2005-10-31'::date) AND (depe_id = 10) AND (id_usu
= 155))
-> Index Scan using expediente_pkey on expediente
b (cost=0.00..6.01 rows=1 width=503)
Index Cond: (b.expe_id = "outer".expe_id)
-> Seq Scan on tipo_expediente c (cost=0.00..1.32
rows=32 width=37)
-> Index Scan using dependencia_pkey on dependencia d
(cost=0.00..5.57 rows=1 width=62)
Index Cond: (d.depe_id = "outer".depe_id)

¿Qué otros índices puedo crear ? ¿Es mejor crear un indice conteniendo todos los campos de la condición where o crear un índice por cada campo que se encuentra en la condición ? ¿Como se interpreta el EXPLAIN ? He tratado de entenderlo en el manual pero mi ingles es básico.

--
atte.
Luis Guevara

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2005-10-13 16:46:21 Re: Consejo sobre manipulación INSERT.
Previous Message Luis Guevara 2005-10-13 16:28:59 Explain de consulta