Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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






pgsql-general by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group