Problemas con una consulta

Gente:

Tengo problemas con una consulta de resultados de Encuestas y necesitaría su ayuda. Habitualmente ejecuto esas consultas desde un Access, por ODBC a tablas linkeadas y obtengo los resultados, que exporto a un Excel para que sean procesados.

Ahora quier hacer una personalización e incorporarlo al Guaraní, para lo cual intento ejecutar los mismos SQL desde el SQL Editor, para pasarselos probados al programador. El punto es que la consulta que en Access demora algunos segundos, no llega al minuto, ejecutados en el SQL Editor no termina nunca … Lo mismo desde el eSQLeditor (otro editor de SQL) … Si la detengo, pasa a un estado de no responde … No tienen error de sintaxis.

Les paso las sentencias, a ver si alguien me puede dar una mano en ver cual es el problema. Gracias desde ya!!

Saludos

Gustavo

SELECT
gde_encues_rpta.alcance, gde_encues_alcance.titulo, sga_materias.nombre, gde_preguntas.texto, gde_encues_rpta.opcion, gde_preg_opcion.descripcion, gde_encues_rpta.comision, sga_comisiones.nombre AS comis_nombre, sga_personas.apellido, sga_personas.nombres, gde_encues_rpta.carrera, gde_encues_rpta.pregunta, sga_personas.nro_inscripcion, gde_encues_rpta.legajo
FROM
((((((gde_encues_rpta INNER JOIN sga_personas ON gde_encues_rpta.nro_inscripcion = sga_personas.nro_inscripcion)
INNER JOIN sga_comisiones ON gde_encues_rpta.comision=sga_comisiones.comision)
INNER JOIN sga_materias ON sga_comisiones.materia=sga_materias.materia)
INNER JOIN gde_preguntas ON gde_encues_rpta.pregunta=gde_preguntas.pregunta)
INNER JOIN gde_preg_opcion ON (gde_encues_rpta.opcion=gde_preg_opcion.opcion) AND (gde_preguntas.pregunta=gde_preg_opcion.pregunta))
LEFT JOIN sga_carreras ON gde_encues_rpta.carrera=sga_carreras.carrera)
INNER JOIN gde_encues_alcance ON gde_encues_rpta.alcance=gde_encues_alcance.alcance
WHERE (((gde_encues_rpta.alcance)=11) AND ((gde_encues_rpta.encuesta)=6))
ORDER BY gde_encues_rpta.alcance, sga_materias.nombre, gde_encues_rpta.pregunta, sga_personas.nro_inscripcion, gde_encues_rpta.legajo;

SELECT
gde_encues_rpta.alcance, gde_encues_alcance.descripcion, sga_materias.nombre, gde_preguntas.texto, gde_encues_rpta.opcion, gde_encues_rpta.comision, sga_comisiones.nombre AS comis_nombre, sga_personas.apellido, sga_personas.nombres, gde_encues_rpta.carrera, gde_encues_rpta.valor, gde_encues_rpta.pregunta, sga_personas.nro_inscripcion, gde_encues_rpta.legajo
FROM
(((((gde_encues_rpta INNER JOIN sga_personas ON gde_encues_rpta.nro_inscripcion = sga_personas.nro_inscripcion)
INNER JOIN sga_comisiones ON gde_encues_rpta.comision = sga_comisiones.comision)
INNER JOIN sga_materias ON sga_comisiones.materia = sga_materias.materia)
INNER JOIN gde_preguntas ON gde_encues_rpta.pregunta = gde_preguntas.pregunta)
LEFT JOIN sga_carreras ON gde_encues_rpta.carrera = sga_carreras.carrera)
INNER JOIN gde_encues_alcance ON gde_encues_rpta.alcance = gde_encues_alcance.alcance
WHERE (((gde_encues_rpta.alcance)=11) AND ((gde_encues_rpta.pregunta)=84 Or (gde_encues_rpta.pregunta)=86) AND ((gde_encues_rpta.encuesta)=6))
ORDER BY gde_encues_rpta.alcance, sga_materias.nombre, gde_encues_rpta.pregunta, sga_personas.nro_inscripcion, gde_encues_rpta.legajo;


Consultas de resultados de encuestas - Access.rar (556 Bytes)

Es probable que MSAccess cree sus propios indices.
En cambio en informix los indices inciden enormemente en el plan de ejecución, sí como las estadísticas.
A veces es necesario partir la consulta para obligar al informix a elegir los indices que vos querés
Saludos

Ok, si, puede ser.

Haciendo pruebas vi que sin el LEFT JOIN funcionaba razonablemente. Tengo que ver si es necesario, quizás no lo sea y esa es la solución.

Saludos

Gustavo