Re: Tuning auna consulta

From: Edwin Perez <edwinandperez(at)gmail(dot)com>
To: Vida Luz Arista <vida(dot)arista(at)ideay(dot)net(dot)ni>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Tuning auna consulta
Date: 2009-07-15 22:20:19
Message-ID: a8e030e90907151520x66940709l89861f0c06309d9b@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

2009/7/15 Vida Luz Arista <vida(dot)arista(at)ideay(dot)net(dot)ni>:
> 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.
>

Podrias indicar cual es el explain analyze de la consulta para ayudarte mejor..

nos vemos

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

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message juan 2009-07-15 22:23:44 Re: Tuning auna consulta
Previous Message Cesar Erices 2009-07-15 21:40:11 Re: Fundamento teorico del rendimiento de una vista