SQL Tuning - Mailing list pgsql-general

From Enrique Alejandro Barrios
Subject SQL Tuning
Date
Msg-id s4f45672.063@mggwmail1
Whole thread Raw
List pgsql-general
Hola, soy nuevo por acá, quisiera saber si me pueden ayudar para ver que modificaciones puedo hacerle a esta consulta
paraque 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.idetapaFROM 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.87rows=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_civilon 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.91rows=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.64rows=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=8322width=24) 
                                                                                  Merge Cond: ("outer".idetapa =
"inner".idetapa)
                                                                                  ->  Index Scan using
etapamecanica_pkeyon etapamecanica  (cost=0.00..2354.51 rows=36177 width=12) 
                                                                                  ->  Sort  (cost=8624.26..8645.07
rows=8322width=12) 
                                                                                        Sort Key: aprobacion.idetapa
                                                                                        ->  Seq Scan on aprobacion
(cost=0.00..8082.38rows=8322 width=12) 
                                                                                              Filter: (idestado =
3::numeric)
                                                  ->  Index Scan using unic_etapa_discrim_civil on obracivil oc
(cost=0.00..24.01rows=6 width=87) 
                                                        Index Cond: ("outer".idetapa = oc.idetapa)
                                            ->  Index Scan using aprob_idetapa_fk on aprobacion  (cost=0.00..15.29
rows=1width=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@metrogas.com.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@metrogas.com.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


pgsql-general by date:

Previous
From: ptjm@interlog.com (Patrick TJ McPhee)
Date:
Subject: Re: Deathly slow performance on SMP red-hat system
Next
From: Tom Lane
Date:
Subject: Re: PLPERL Function very Slow