Search Postgresql Archives

SQL Tuning

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxxxxxx 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@xxxxxxxxxxxxxxx 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



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux