From: | "Enrique Alejandro Barrios" <EBARRIOS(at)metrogas(dot)com(dot)ar> |
---|---|
To: | <pgsql-general(at)postgresql(dot)org> |
Subject: | SQL Tuning |
Date: | 2006-08-29 17:59:42 |
Message-ID: | s4f45672.063@mggwmail1 |
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)
*********************************************************************
¡IMPORTANTE!
Para evitar accidentes por inhalación de monóxido de carbono:
- Mantenga los ambientes ventilados en forma permanente.
- Revise que la llama sea color azul y uniforme.
- Instale y haga revisar periódicamente sus artefactos sólo a través
de gasistas matriculados.
Recuerde que los artefactos a gas pueden emitir Monóxido de Carbono:
un gas altamente tóxico e imperceptible.
Más consejos en http://www.metrogas.com.ar
*********************************************************************
--------------------------------------------------
Este mensaje es privado y confidencial
y va dirigido sólo al destinatario indicado.
Si usted lo ha recibido por error, por favor
avísenos inmediatamente vía e-mail a
error-mail(at)metrogas(dot)com(dot)ar y tenga la amabilidad
de eliminarlo de su sistema.
La utilización o divulgación del contenido del
mismo puede importar la comisión de un delito.
No copie, reproduzca o divulgue su contenido,
sea en forma parcial o total.
Cualquier opinión contenida, es exclusiva
de su autor y no representa necesariamente
la opinión de MetroGAS S.A. - Muchas gracias.
--------------------------------------------------
This message is private and confidential and it
is only intended for the addressee named above.
If you have received this message and it is not
addressed to you, please advise us immediately at
error-mail(at)metrogas(dot)com(dot)ar and kindly remove it
from your system.
The use or disclosure of the contents of this
message may be regarded as an offense.
Do not copy, reproduce or disclose them,
either partially or fully.
Opinions are the exclusive responsibility
of the author and do not necessarily represent
the opinion of MetroGAS S.A. - Thank you very much.
--------------------------------------------------
:: http://www.metrogas.com.ar
From | Date | Subject | |
---|---|---|---|
Next Message | Seneca Cunningham | 2006-08-29 18:04:25 | Re: strange sum behaviour |
Previous Message | Peter Eisentraut | 2006-08-29 17:57:55 | Re: strange sum behaviour |