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,
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. |