Buenas,
La consulta que genera la operación nos está demorando casi 40 segundos para devolver 455 registros
¿Ven algo raro? ¿qué se podría hacer para mejorar la performance?
SELECT sga_ubicaciones.ubicacion AS id_ubicacion,
sga_ubicaciones.nombre AS ubicacion,
vw_actividades_plan.elemento AS id_actividad,
'(' || vw_actividades_plan.codigo || ') ' || vw_actividades_plan.nombre AS actividades,
mdp_personas.apellido || ', ' || mdp_personas.nombres as apellido_y_nombre,
mdp_tipo_documento.desc_abreviada || ' ' || mdp_personas_documentos.nro_documento as documento_principal,
mdp_personas.apellido,
mdp_personas.nombres,
mdp_personas.sexo as genero,
mdp_personas_documentos.nro_documento,
mdp_personas_documentos.tipo_documento,
mdp_personas_documentos.pais_documento,
(SELECT mdp_personas_contactos.email
FROM mdp_personas_contactos
WHERE mdp_personas_contactos.persona = mdp_personas.persona AND
mdp_personas_contactos.contacto_tipo IN ('MP','MS','MI') AND
mdp_personas_contactos.email IS NOT NULL
ORDER BY CASE mdp_personas_contactos.contacto_tipo
WHEN 'MP' THEN 1
WHEN 'MS' THEN 2
WHEN 'MI' THEN 3
ELSE 4
END
LIMIT 1) as email,
(SELECT mdp_personas_contactos.telefono_codigo_area || '|' || mdp_personas_contactos.telefono_numero
FROM mdp_personas_contactos
WHERE mdp_personas_contactos.persona = mdp_personas.persona AND
mdp_personas_contactos.contacto_tipo IN ('C','F','T','L') AND
mdp_personas_contactos.telefono_codigo_area IS NOT NULL AND
mdp_personas_contactos.telefono_numero IS NOT NULL
ORDER BY CASE mdp_personas_contactos.contacto_tipo
WHEN 'C' THEN 1
WHEN 'F' THEN 2
WHEN 'T' THEN 3
WHEN 'L' THEN 4
ELSE 5
END
LIMIT 1) as telefono,
vw_insc_cursada.inscripcion,
sga_alumnos.alumno,
sga_alumnos.legajo,
sga_alumnos.persona,
sga_alumnos.propuesta,
vw_actividades_plan.elemento,
sga_periodos.periodo,
vw_insc_cursada.plan_version,
vw_insc_cursada.comision AS id_comision,
sga_comisiones.nombre AS comision,
vw_insc_cursada.estado AS estado,
vw_insc_cursada.estado AS estado_real,
vw_insc_cursada.nro_transaccion AS nro_transaccion,
sga_turnos_cursadas.nombre AS turno,
sga_catedras.nombre AS catedra,
sga_inscripciones_estados.nombre AS estado_inscr,
to_char(vw_insc_cursada.fecha_inscripcion, 'DD/MM/YYYY HH24:MI:SS') AS fecha_inscripcion,
sga_periodos.nombre AS periodo_nombre,
sga_periodos.anio_academico,
sga_periodos.anio_academico || ' - ' || sga_periodos.nombre AS anio_periodo_nombre,
vw_actividades_plan.codigo AS cod_actividad,
vw_actividades_plan.nombre AS actividad,
sga_propuestas.nombre_abreviado AS propuesta_nombre_abreviado,
f_instancias_insc_cursada(vw_insc_cursada.inscripcion) AS instancia,
vw_insc_cursada.sq_token
FROM vw_insc_cursada
JOIN sga_comisiones ON vw_insc_cursada.comision = sga_comisiones.comision
JOIN sga_periodos_lectivos ON sga_comisiones.periodo_lectivo = sga_periodos_lectivos.periodo_lectivo
JOIN sga_periodos ON sga_periodos_lectivos.periodo = sga_periodos.periodo
JOIN vw_actividades_plan ON (vw_actividades_plan.elemento) IN
( SELECT toba_pdtasoc_1.elemento
FROM vw_ug_elementos toba_pdtasoc_1
WHERE ( toba_pdtasoc_1.unidad_gestion IN ('22') ) )
AND (sga_comisiones.elemento = vw_actividades_plan.elemento AND vw_insc_cursada.plan_version = vw_actividades_plan.plan_version)
JOIN sga_ubicaciones ON sga_comisiones.ubicacion = sga_ubicaciones.ubicacion
JOIN sga_alumnos ON vw_insc_cursada.alumno = sga_alumnos.alumno
JOIN mdp_personas ON sga_alumnos.persona = mdp_personas.persona
JOIN sga_propuestas ON sga_alumnos.propuesta = sga_propuestas.propuesta
JOIN sga_inscripciones_estados ON vw_insc_cursada.estado = sga_inscripciones_estados.estado
LEFT JOIN mdp_personas_documentos ON mdp_personas.documento_principal = mdp_personas_documentos.documento
LEFT JOIN mdp_tipo_documento ON mdp_personas_documentos.tipo_documento = mdp_tipo_documento.tipo_documento
LEFT JOIN sga_catedras ON sga_comisiones.catedra = sga_catedras.catedra
LEFT JOIN sga_turnos_cursadas ON sga_comisiones.turno = sga_turnos_cursadas.turno
WHERE true AND sga_periodos.anio_academico = '2022'
AND sga_periodos_lectivos.periodo_lectivo = '675'
AND sga_propuestas.propuesta = '1077'
UNION ALL
-- Rechazadas y Dadas de Baja
SELECT sga_ubicaciones.ubicacion AS id_ubicacion,
sga_ubicaciones.nombre AS ubicacion,
vw_actividades_plan.elemento AS id_actividad,
'(' || vw_actividades_plan.codigo || ') ' || vw_actividades_plan.nombre AS actividades,
mdp_personas.apellido || ', ' || mdp_personas.nombres as apellido_y_nombre,
mdp_tipo_documento.desc_abreviada || ' ' || mdp_personas_documentos.nro_documento as documento_principal,
mdp_personas.apellido,
mdp_personas.nombres,
mdp_personas.sexo as genero,
mdp_personas_documentos.nro_documento,
mdp_personas_documentos.tipo_documento,
mdp_personas_documentos.pais_documento,
(SELECT mdp_personas_contactos.email
FROM mdp_personas_contactos
WHERE mdp_personas_contactos.persona = mdp_personas.persona AND
mdp_personas_contactos.contacto_tipo IN ('MP','MS','MI') AND
mdp_personas_contactos.email IS NOT NULL
ORDER BY CASE mdp_personas_contactos.contacto_tipo
WHEN 'MP' THEN 1
WHEN 'MS' THEN 2
WHEN 'MI' THEN 3
ELSE 4
END
LIMIT 1) as email,
(SELECT mdp_personas_contactos.telefono_codigo_area || '|' || mdp_personas_contactos.telefono_numero
FROM mdp_personas_contactos
WHERE mdp_personas_contactos.persona = mdp_personas.persona AND
mdp_personas_contactos.contacto_tipo IN ('C','F','T','L') AND
mdp_personas_contactos.telefono_codigo_area IS NOT NULL AND
mdp_personas_contactos.telefono_numero IS NOT NULL
ORDER BY CASE mdp_personas_contactos.contacto_tipo
WHEN 'C' THEN 1
WHEN 'F' THEN 2
WHEN 'T' THEN 3
WHEN 'L' THEN 4
ELSE 5
END
LIMIT 1) as telefono,
vw_insc_cursada.inscripcion,
sga_alumnos.alumno,
sga_alumnos.legajo,
sga_alumnos.persona,
sga_alumnos.propuesta,
vw_actividades_plan.elemento,
sga_periodos.periodo,
vw_insc_cursada.plan_version,
vw_insc_cursada.comision AS id_comision,
sga_comisiones.nombre AS comision,
vw_insc_cursada.estado AS estado,
vw_insc_cursada.operacion AS estado_real,
vw_insc_cursada.nro_transaccion AS nro_transaccion,
sga_turnos_cursadas.nombre AS turno,
sga_catedras.nombre AS catedra,
Case vw_insc_cursada.operacion
WHEN 'B' THEN 'Baja'
WHEN 'R' THEN 'Rechazada'
END AS estado_inscr,
to_char(vw_insc_cursada.fecha_inscripcion, 'DD/MM/YYYY HH24:MI:SS') AS fecha_inscripcion,
sga_periodos.nombre AS periodo_nombre,
sga_periodos.anio_academico,
sga_periodos.anio_academico || ' - ' || sga_periodos.nombre AS anio_periodo_nombre,
vw_actividades_plan.codigo AS cod_actividad,
vw_actividades_plan.nombre AS actividad,
sga_propuestas.nombre_abreviado AS propuesta_nombre_abreviado,
f_instancias_insc_cursada_log(vw_insc_cursada.inscripcion) AS instancia,
vw_insc_cursada.sq_token
FROM vw_insc_cursada_log as vw_insc_cursada
JOIN sga_comisiones ON vw_insc_cursada.comision = sga_comisiones.comision
JOIN sga_periodos_lectivos ON sga_comisiones.periodo_lectivo = sga_periodos_lectivos.periodo_lectivo
JOIN sga_periodos ON sga_periodos_lectivos.periodo = sga_periodos.periodo
JOIN vw_actividades_plan ON (sga_comisiones.elemento = vw_actividades_plan.elemento AND vw_insc_cursada.plan_version = vw_actividades_plan.plan_version)
JOIN sga_ubicaciones ON sga_comisiones.ubicacion = sga_ubicaciones.ubicacion
JOIN sga_alumnos ON vw_insc_cursada.alumno = sga_alumnos.alumno
JOIN mdp_personas ON sga_alumnos.persona = mdp_personas.persona
JOIN sga_propuestas ON sga_alumnos.propuesta = sga_propuestas.propuesta
LEFT JOIN mdp_personas_documentos ON mdp_personas.documento_principal = mdp_personas_documentos.documento
LEFT JOIN mdp_tipo_documento ON mdp_personas_documentos.tipo_documento = mdp_tipo_documento.tipo_documento
LEFT JOIN sga_catedras ON sga_comisiones.catedra = sga_catedras.catedra
LEFT JOIN sga_turnos_cursadas ON sga_comisiones.turno = sga_turnos_cursadas.turno
WHERE true AND sga_periodos.anio_academico = '2022'
AND sga_periodos_lectivos.periodo_lectivo = '675'
AND sga_propuestas.propuesta = '1077'
ORDER BY ubicacion,
actividad,
apellido_y_nombre
Muchas gracias!