Tuning auna consulta

From: "Vida Luz Arista" <vida(dot)arista(at)ideay(dot)net(dot)ni>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Tuning auna consulta
Date: 2009-07-15 21:07:03
Message-ID: !&!AAAAAAAAAAAYAAAAAAAAAOO6ezNGTUlAlozSL92lwK7CgAAAEAAAAH7VZFTOyMxMgEzwDaC9btcBAAAAAA==@ideay.net.ni
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola a todos,

Tengo un problema con una consulta, uno de los chicos de desarrollo, tiene
una consulta que se hace pesada, y esta tarde como unos 2 minutos, lo más
extraño es que no hay muchos registros y estos es demasiado tiempo sobre
todo porque aun son pocos registros, me asusta porque cuando la BD crezca
esto va ser demasiado tiempo, en esta consulta se trabaja con 15 tablas, la
consulta se las dejo y les pido sugerencias para mejorar la consulta o si es
posible partirla.

Consulta

========

SELECT DISTINCT emp.id_empresa AS Id_Empresa, emp.nombre AS Empresa,

(

SELECT ta2.descripcion FROM data_empresa.empresa e2

INNER JOIN data_empresa.empresa_actividad ea2

ON (ea2.id_empresa = e2.id_empresa )

INNER JOIN data_proyecto.tipo_actividad ta2

ON (ta2.id_actividad = ea2.id_actividad)

WHERE ea2.principal = true AND e2.id_empresa = emp.id_empresa

) AS Actividad,

(case when ta.descripcion is not null then ta.descripcion else 'Ninguna'
End) AS SubActividad,

tca.descripcion AS Categoria,

dep.descripcion AS Departamento,

mun.nombre AS Municipio,

(CASE WHEN dis.nombre IS NOT NULL THEN dis.nombre ELSE 'Ninguno' END) AS
Distrito,

(CASE WHEN emp.direccion IS NOT NULL THEN emp.direccion ELSE 'Ninguno' END)
AS Direccion,

(CASE WHEN emp.telefono IS NOT NULL THEN emp.telefono ELSE 'Ninguno' END) AS
Telefono,

(CASE WHEN us.fax IS NOT NULL THEN us.fax ELSE 'Ninguno' END) AS Fax,

(CASE WHEN emp.email IS NOT NULL THEN emp.email ELSE 'Ninguno' END) AS
Email,

(CASE WHEN lic.consec_constancia IS NOT NULL THEN lic.consec_constancia ELSE
0 END) AS Constancia,

(case when emp.activo = true then emp.fecha_apertura when emp.activo = false
then emp.fecha_cierre else emp.fecha_cierre End) AS Fecha,

(case when emp.activo = true then 'Activo' when emp.activo = false then
tc.descripcion else 'Inactivo' End) AS Estado,

(CASE WHEN lic.num_licencia IS NOT NULL THEN lic.num_licencia ELSE 'Ninguno'
END) AS NumRegistro

FROM data_empresa.empresa emp INNER JOIN data_empresa.usuario_empresa ue

ON (emp.id_empresa = ue.id_empresa) LEFT JOIN data_usuario.usuario us

ON (us.id_usuario=ue.id_usuario) LEFT JOIN data_empresa.empresa_actividad ea

ON (emp.id_empresa = ea.id_empresa) LEFT JOIN data_proyecto.tipo_actividad
ta

ON (ea.id_actividad = ta.id_actividad) LEFT JOIN data_empresa.cierre_empresa
ce

ON (emp.id_empresa = ce.id_empresa) LEFT JOIN data_empresa.tipo_cierre tc

ON (ce.id_tipo_cierre = tc.id ) LEFT JOIN data_empresa.tipo_categoria tca

ON (ea.id_categoria = tca.id_tipo_categoria) LEFT JOIN
data_empresa.cargos_empresa cemp

ON (ea.id_actividad = cemp.id_actividad ) LEFT JOIN localidad.departamento
dep

ON (dep.id_dept = emp.departamento) LEFT JOIN localidad.municipio mun

ON (mun.id_dept = emp.departamento AND mun.activo = true) LEFT JOIN
localidad.distrito dis

ON (dis.id = emp.distrito) LEFT JOIN data_empresa.parametros_empresa paremp

ON (ea.id_actividad = paremp.id_actividad) LEFT JOIN data_empresa.situacion
s

ON (s.id_situacion = emp.id_situacion) LEFT JOIN licencia.licencias lic

ON (lic.id_empresa = emp.id_empresa) LEFT JOIN licencia.estado_pago ep

ON (ep.id_estado_pago = lic.id_estado_pago)

WHERE ((emp.nombre ILIKE '%%' AND emp.id_situacion ILIKE '%%' ) AND
ea.principal=false)

GROUP BY emp.nombre, emp.id_empresa, ta.descripcion, tca.descripcion,
dep.descripcion,

mun.nombre, dis.nombre, emp.direccion, emp.telefono, us.fax, emp.email,
lic.consec_constancia,

paremp.nombre, emp.fecha_apertura, emp.fecha_cierre, emp.activo,
tc.descripcion, lic.num_licencia

ORDER BY emp.nombre

Agradeceré sus sugerencias.

Saludos,

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Manuel A. Estevez Fernandez 2009-07-15 21:38:14 Re: Fundamento teorico del rendimiento de una vista
Previous Message Alvaro Herrera 2009-07-15 21:03:17 Re: No se puede conectar.