SQL Tuning

From: <ing_enriquebarrios(at)argentina(dot)com>
To: pgsql-general(at)postgresql(dot)org
Subject: SQL Tuning
Date: 2006-08-29 20:21:30
Message-ID: 20060829202125.B3AA73B0401@ns-1.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hola, soy nuevo por acá, quisiera saber si me pueden ayudar para ver que modificaciones puedo hacerle a esta consulta para
que funciones mas rápido ya que como esta ahora consume mucha cpu y memoria.
desde ya muchas gracias.
saludos

query

SELECT DISTINCT
t.id,
emp.descripcion as contratista,
fecha_etapa_cod(eh.idetapa , '12') as asignado ,
t.id AS calden,
trabajosistemao.reclamo,
tt.descripcion,
oc.calle,
oc.numero,
s.descripcion || ' - ' || s.medida || ' - ' || s.tipo AS solado,
oc.cantidad,
oc.largo,
oc.ancho,
oc.profundidad,
oc.piezas,
entrecalle_siade_cod(trabajosistemao.reclamo) as entrecalle

FROM ((((obracivil AS oc INNER JOIN etapahead AS eh ON oc.idetapa = eh.idetapa)
INNER JOIN trabajo AS t ON eh.idtrabajo = t.id)
INNER JOIN aprobacion AS ap ON ap.idetapa = eh.idetapa)
INNER JOIN solado AS s ON oc.idsolado = s.idsolado)
LEFT JOIN trabajosistemao ON t.id = trabajosistemao.id, empresa emp, tipotrabajo tt

WHERE fecha_etapa_cod(eh.idetapa , '3') is null AND
(oc.discrim)='D' AND

emp.idcontratista = empresa_etapa_cod(eh.idetapa) AND

tt.idtipotrabajo = idtipotrabajo_etapa_cod(eh.idetapa) AND

empresa_etapa_cod(eh.idetapa) in (500189) AND

fecha_etapa_cod(eh.idetapa , '12') between '2006-05-30' and '2006-06-30'

--select max(fecha) from aprobacion where idetapa = $1 and idestado = $2
--INNER JOIN aprobacion AS ap ON ap.idetapa = eh.idetapa)

UNION

SELECT
eh.idtrabajo as id,
emp.descripcion as contratista,
aprobacion.fecha as asignado ,
eh.idtrabajo as calden,
trabajosistemao.reclamo,
tt.descripcion,
oc.calle,
oc.numero,
'' as solado,
oc.cantidad,
oc.largo,
oc.ancho,
oc.profundidad,
oc.piezas,
entrecalle_siade_cod(trabajosistemao.reclamo) as entrecalle
FROM (((
trabajosistemao INNER JOIN etapahead AS eh ON trabajosistemao.id = eh.idtrabajo)
LEFT JOIN obracivil AS oc ON eh.idetapa = oc.idetapa)
INNER JOIN aprobacion ON eh.idetapa = aprobacion.idetapa)
INNER JOIN trabajo AS t ON trabajosistemao.id = t.id, empresa emp, tipotrabajo tt
WHERE (((trabajosistemao.reclamo) Is Not Null) AND ((oc.idetapa) Is Null) AND ((eh.idetapa) Not In (SELECT DISTINCT
etapamecanica.idetapa FROM etapamecanica INNER JOIN aprobacion ON etapamecanica.idetapa = aprobacion.idetapa WHERE
(((aprobacion.idestado)='3')))) AND ((aprobacion.idestado)='12'))
AND emp.idcontratista = empresa_etapa_cod(eh.idetapa)
AND tt.idtipotrabajo = idtipotrabajo_etapa_cod(eh.idetapa)
AND empresa_etapa_cod(eh.idetapa) in (500189)
AND aprobacion.fecha between '2006-05-30' and '2006-06-30';

Explain output
*---------------

Unique (cost=193218032.67..193218032.75 rows=1 width=278)
-> Sort (cost=193218032.67..193218032.67 rows=2 width=278)
Sort Key: id, contratista, asignado, calden, reclamo, descripcion, calle, numero, solado, cantidad, largo, ancho,
profundidad, piezas, entrecalle
-> Append (cost=1707.38..193218032.66 rows=2 width=278)
-> Subquery Scan "*SELECT* 1" (cost=1707.38..1707.43 rows=1 width=278)
-> Unique (cost=1707.38..1707.43 rows=1 width=278)
-> Sort (cost=1707.38..1707.39 rows=1 width=278)
Sort Key: t.id, emp.descripcion, fecha_etapa_cod(eh.idetapa, 12::numeric), t.id, trabajosistemao.reclamo,
tt.descripcion, oc.calle, oc.numero, ((((s.descripcion || ' - '::character varying) || s.medida) || ' - '::character varying) || s.tipo),
oc.cantidad, oc.largo, oc.ancho, oc.profundidad, oc.piezas, entrecalle_siade_cod(trabajosistemao.reclamo)
-> Nested Loop (cost=1624.89..1707.37 rows=1 width=278)
Join Filter: ("inner".idtipotrabajo = idtipotrabajo_etapa_cod("outer".idetapa))
-> Nested Loop (cost=1624.89..1705.57 rows=1 width=246)
Join Filter: ("inner".idcontratista = empresa_etapa_cod("outer".idetapa))
-> Nested Loop (cost=1624.89..1691.56 rows=10 width=220)
-> Hash Join (cost=1624.89..1630.10 rows=10 width=192)
Hash Cond: ("outer".idsolado = "inner".idsolado)
-> Seq Scan on solado s (cost=0.00..3.37 rows=137 width=47)
-> Hash (cost=1624.86..1624.86 rows=10 width=145)
-> Nested Loop (cost=0.00..1624.86 rows=10 width=145)
-> Nested Loop (cost=0.00..1609.53 rows=1 width=133)
-> Nested Loop (cost=0.00..1603.66 rows=1 width=120)
-> Seq Scan on etapahead eh (cost=0.00..1589.87 rows=1 width=25)
Filter: ((fecha_etapa_cod(idetapa, 3::numeric) IS NULL) AND
(empresa_etapa_cod(idetapa) = 500189::numeric) AND (fecha_etapa_cod(idetapa, 12::numeric) >= '2006-05-30'::date) AND
(fecha_etapa_cod(idetapa, 12::numeric) <= '2006-06-30'::date))
-> Index Scan using unic_etapa_discrim_civil on obracivil oc
(cost=0.00..13.75 rows=3 width=95)
Index Cond: ((oc.idetapa = "outer".idetapa) AND (oc.discrim
= 'D'::character varying))
-> Index Scan using trabajo_pkey on trabajo t (cost=0.00..5.85 rows=1
width=13)
Index Cond: ("outer".idtrabajo = t.id)
-> Index Scan using aprob_idetapa_fk on aprobacion ap (cost=0.00..15.21
rows=10 width=12)
Index Cond: (ap.idetapa = "outer".idetapa)
-> Index Scan using trabajosistemao_pkey on trabajosistemao (cost=0.00..5.91 rows=1
width=28)
Index Cond: ("outer".id = trabajosistemao.id)
-> Seq Scan on empresa emp (cost=0.00..1.14 rows=14 width=26)
-> Seq Scan on tipotrabajo tt (cost=0.00..1.32 rows=32 width=32)
-> Subquery Scan "*SELECT* 2" (cost=0.00..193216325.23 rows=1 width=227)
-> Nested Loop (cost=0.00..193216325.23 rows=1 width=227)
Join Filter: ("inner".idtipotrabajo = idtipotrabajo_etapa_cod("outer".idetapa))
-> Nested Loop (cost=0.00..193216323.43 rows=1 width=195)
Join Filter: ("inner".idcontratista = empresa_etapa_cod("outer".idetapa))
-> Nested Loop (cost=0.00..193216317.31 rows=5 width=169)
Join Filter: ("outer".id = "inner".id)
-> Nested Loop (cost=0.00..193216290.75 rows=5 width=156)
-> Nested Loop (cost=0.00..193215681.46 rows=40 width=140)
Filter: ("inner".idetapa IS NULL)
-> Nested Loop (cost=0.00..193214722.13 rows=40 width=53)
-> Seq Scan on trabajosistemao (cost=0.00..692.51 rows=15170 width=28)
Filter: (reclamo IS NOT NULL)
-> Index Scan using "etapahead_idtrabajo_FK" on etapahead eh (cost=0.00..12736.64
rows=1 width=25)
Index Cond: ("outer".id = eh.idtrabajo)
Filter: ((empresa_etapa_cod(idetapa) = 500189::numeric) AND (subplan))
SubPlan
-> Materialize (cost=11227.21..11227.21 rows=832 width=24)
-> Unique (cost=8624.26..11227.21 rows=832 width=24)
-> Merge Join (cost=8624.26..11206.41 rows=8322 width=24)
Merge Cond: ("outer".idetapa = "inner".idetapa)
-> Index Scan using etapamecanica_pkey on etapamecanica
(cost=0.00..2354.51 rows=36177 width=12)
-> Sort (cost=8624.26..8645.07 rows=8322 width=12)
Sort Key: aprobacion.idetapa
-> Seq Scan on aprobacion (cost=0.00..8082.38 rows=8322 width=12)
Filter: (idestado = 3::numeric)
-> Index Scan using unic_etapa_discrim_civil on obracivil oc (cost=0.00..24.01 rows=6
width=87)
Index Cond: ("outer".idetapa = oc.idetapa)
-> Index Scan using aprob_idetapa_fk on aprobacion (cost=0.00..15.29 rows=1 width=16)
Index Cond: ("outer".idetapa = aprobacion.idetapa)
Filter: ((idestado = 12::numeric) AND (fecha >= '2006-05-30'::date) AND (fecha <= '2006-06-
30'::date))
-> Index Scan using trabajo_pkey on trabajo t (cost=0.00..5.85 rows=1 width=13)
Index Cond: (t.id = "outer".idtrabajo)
-> Seq Scan on empresa emp (cost=0.00..1.14 rows=14 width=26)
-> Seq Scan on tipotrabajo tt (cost=0.00..1.32 rows=32 width=32)

------------------------------------------------------------------------
Conectate a Internet Gratis de Argentina.Com

Browse pgsql-general by date

  From Date Subject
Next Message CSN 2006-08-29 21:15:25 Re: database files are incompatible with server, after computer restart
Previous Message Chris Mair 2006-08-29 19:23:04 Re: strange sum behaviour