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
---------------------------(end of broadcast)---------------------------
TIP 3: Have you checked our extensive FAQ?
http://www.postgresql.org/docs/faq