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: