Personalmente haria una suerte de vista materializada. 
Tendrias que ver como performa si en lugar de tener una temporal le
pones una funcion y un trigger a cada unidad organizativa que al
actualiarse, vaya incrementando / decrementando cada Tx
Haces la carga inicial con tu proceso y seguis con esto que te comento.
Saludos.


El lun, 08-06-2015 a las 08:20 -0400, 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 Aguero esq. Calle 2. Ciego de
> Ávila. Cuba.
> Telf.: 53 33 22 8971, email.: 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


Responder a