Estimados delphineros, buen día/tarde/noche, según aplique.
Les planteo mi problema:
Tengo éste código SQL que ejecuto dentro de mi aplicación.
Código SQL
[-]SELECT DISTINCT E2_CTRL_PAC
FROM T4_CON_CITA
WHERE T4_FECHA_CITA > 40537
AND T4_FECHA_CITA < 40903
AND T4_ASISTIO = 1
AND T4_FALTO = 0
AND C21_DX_CIE > -1
AND NOT C22_DX_CIE IS NULL
AND E2_CTRL_PAC NOT IN (SELECT DISTINCT E2_CTRL_PAC
FROM T6_ESPECIALES
WHERE T6_FECHA_CITA > 40537
AND T6_FECHA_CITA < 40903
AND T6_ASISTIO = 1
AND T6_FALTO = 0
AND C21_DX_CIE > -1
AND NOT C22_DX_CIE IS NULL)
UNION ALL(
SELECT DISTINCT E2_CTRL_PAC
FROM T6_ESPECIALES
WHERE T6_FECHA_CITA > 40537
AND T6_FECHA_CITA < 40903
AND T6_ASISTIO = 1
AND T6_FALTO = 0
AND C21_DX_CIE > -1
AND NOT C22_DX_CIE IS NULL
AND E2_CTRL_PAC NOT IN (SELECT DISTINCT E2_CTRL_PAC
FROM T4_CON_CITA
WHERE T4_FECHA_CITA > 40537
AND T4_FECHA_CITA < 40903
AND T4_ASISTIO = 1
AND T4_FALTO = 0
AND C21_DX_CIE > -1
AND NOT C22_DX_CIE IS NULL)
)
ORDER BY E2_CTRL_PAC
Para mayor abundamiento, tengo éste parámetro definido en "hard-code" dentro de mi aplicación:
Código Delphi
[-] qryPacientes.CommandTimeout := 360;
qrySSAuxiliar.CommandTimeout := 360;
qrySISRep.CommandTimeout := 360;
qryActualizar.CommandTimeout := 360;
qrySumatoria.CommandTimeout := 360;
Ahora, el problema es que sucede 1 de cada 3 veces un "cuelgue" del TADOQuery que contiene el SQL anterior, el cual en Microsoft SQL Server Management Studio tarda NO MÁS DE 1 MINUTO en arrojar los 80 y algo mil registros requeridos, y ésto después de ejecutar por casi 3 minutos.
¿Alguna idea, corrección, locura o maldición que me permita continuar mi desarrollo?