Optimización de consulta

De que otro modo puedo realizar la siguiente consulta y que sea más rápida:
SELECT SUM(b.N_BILLETES_VEN *
c.N_PRC_BILLETE)
INTO v_ret
FROM TC a, TMP_VEN_IE b, JGO_IE c
WHERE a.ID_N_PV = p_ID_N_PV AND
b.ID_N_TC = a.ID_N_TC AND
b.ID_N_JR >= v_jornada AND
b.ID_N_JR <= v_jornada AND
b.ID_N_JGO = c.ID_N_JGO AND
ID_D_NOTIF = (Select MAX
(ID_D_NOTIF)
from TMP_VEN_IE d
WHERE d.ID_N_JGO =
b.ID_N_JGO
AND d.ID_N_TC =
b.ID_N_TC
AND d.ID_N_JR =
b.ID_N_JR);
Gracias.

1 Respuesta

Respuesta
1
En todas las consultas viene bien añadir al principio de la clausula WHERE las condiciones que van a limitar el conjunto de registros a recuperar; en tu caso yo pondría primero en el WHERE las condiciones b.ID_N_JR >= v_jornada b.ID_N_JR <= v_jornada. Además tendrías que asegurarte que tienes índices en todas las columnas sobre las que haces el JOIN de las tablas. En todos los casos te recomiendo que utilices las orden EXPLAIN PLAN de SQL*Plus por que dependiendo de la versión de Oracle que tengas y de como esté configurada la instancia puedes obtener unos resultados u otros.
Mediante la orden EXPLAIN PLAN vas a poder ver el plan de ejecución de tu consulta y poder mejorarlo cambiando la clausula SELECT. Otra opción de SQL*Plus te puede ayudar es SET TIMING ON; con esta opción activada cada vez que ejecutes una consulta te dará el tiempo en milisegundos que ha tardado la consulta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas