SQL Tuning - Mailing list pgsql-general

From
Subject SQL Tuning
Date
Msg-id 20060829202125.B3AA73B0401@ns-1.net
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
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.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.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=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)

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






pgsql-general by date:

Previous
From: Chris Mair
Date:
Subject: Re: strange sum behaviour
Next
From: CSN
Date:
Subject: Re: database files are incompatible with server, after computer restart