Hola Esneiker, trata de utilizar clausula "WITH", te puede ayudar mucho
a optimizar mejor ese tipo de consultas donde tienes subconsultas en en
el SELECT.
http://www.postgresql.org/docs/9.4/interactive/queries-with.html
Saludos
El 08-06-2015 a las 9:20, Esneiker Enriquez Cabrera escribió:
Saludos a todos los amigos de la comunidad.
Les escribo porque tengo un problema y no logro encontrar una buena
forma de resolverlo. Tengo una función para obtener reportes
estadísticos donde debo retornar el nombre de las unidades
organizativas, los nombres de los tipos de servicios y los totales, de
la siguiente forma:
Unidad
Tipo de servicio
T1
T2
T3
T4
El problema es que entre la tabla de unidades organizativas y tipos de
servicio no hay relación directa, sino a través de otras tablas del
negocio. Necesito tirar todas las unidades contra todos los tipos de
servicio.
La solución que he dado hasta el momento es con un ciclo for recorrer
la tabla tipo de servicio e ir calculando los totales e irlos
insertando en una tabla temporal para al final devolver los valores,
donde evidentemente esto provoca problemas de rendimiento, el código
es el siguiente(cortado para no abrumar):
for aid_elemento,adescripcion from vw_nmtipo_servicio order by
tipo_servicio loop
SQLText = 'INSERT INTO estadistico SELECT id, nombre,
(SELECT COUNT(distinct
vw_registro_expediente_incidencia.id) FROM
vw_registro_expediente_incidencia WHERE ...) AS t1,
(SELECT COUNT(distinct
vw_registro_expediente_incidencia.id) FROM
vw_registro_expediente_incidencia ...) AS t2,
(SELECT COUNT(distinct
vw_registro_expediente_incidencia.id) FROM
vw_registro_expediente_incidencia ...) AS t3,
(SELECT COUNT(distinct
vw_registro_expediente_incidencia.id) FROM
vw_registro_expediente_incidencia ...) AS t4
'''||adescripcion_elemento||'''::character varying as
criterio1 FROM nmunidad_org WHERE (nmunidad_org.id IN
('||alista_id_nivel||'))';
execute SQLText;
SQLText = '';
end loop;
Espero que me puedan dar alguna recomendación para optimizar el diseño.
Saludos,
*/M.Sc. Esneiker Enriquez Cabrera/**
**Esp. B en Ciencias Informáticas*
Desoft en Ciego de Ávila. Joaquín de Agueroesq. Calle 2. Ciego de
Ávila. Cuba.
*Telf.:* 53 33 22 8971, *email.:* eenriq...@cav.desoft.cu
<mailto:eenriq...@cav.desoft.cu>
__________ Información de ESET NOD32 Antivirus, versión de la base de
firmas de virus 11728 (20150603) __________
ESET NOD32 Antivirus ha comprobado este mensaje.
http://www.eset.com