3 개의 하위 쿼리로 oracle sql을 작성하지만 시간 초과 문제가 발생합니다. 해결 방법에 대한 기술적 인 도움을 바랍니다. 하위 쿼리로 인해 하위 쿼리가 발생하는 Oracle SQL
select DISTINCT E_reg.applicant_id,
E_REG.L_NAME,
E_REG.F_NAME,
E_REG.B_DATE,
E_REG.REG_DATE,
from E_REG,TRANSACTION
where E_REG.ID=TRANSACTION.PAR_ID
and TRANSACTION.BEGIN_DATE BETWEEN to_date ('01-APR-2012')AND to_date('30-JUN- 2012')
and e_reg.applicant_id NOT IN
(select applicant_id
from w_reg
where reg_date <'01-JUL-2012'
and exit_date is NULL or exit_date >='01-APR-2012'
or e_reg.applicant_id NOT IN
(select applicant_id
from t_reg
where reg_date <'01-JUL-2012'
and exit_date is NULL or exit_date>='01-APR-2012')
or e_reg.applicant_id NOT IN
(select applicant_id
from r_reg
where reg_date <'01-JUL-2012'
and o_attend IS NOT NULL
and term_date is NULL or term_date >='01-APR-2012')
은 기본적으로 우리는 당신이 될 수있는 4 개 프로그램이 (t, 승, 전자, 및 R) : 여기 내 쿼리입니다. 그것들은 기본적인 참가자 정보를 저장하는 모든 분리 된 테이블입니다. 동시에 4 개 프로그램 모두에있을 수 있으며, 신청자 ID는 모든 사람의 열쇠가됩니다.
트랜잭션 테이블에는 r 프로그램이 아닌 3 개 또는 4 개의 프로그램에서 수신 할 수있는 서비스가 있으며 자체 트랜잭션 테이블이 있습니다.
시간대에 서비스가 있지만 동시에 다른 프로그램에 서비스가없는 전자 테이블의 참가자 목록을 원합니다. 그들은 전자 프로그램을 통해서만 서비스 될 것입니다. 오늘 아침에 일하는 것처럼 보였지만 시간이 흐르기 시작하고 전혀 돌아 가지 않았습니다. 하위 쿼리 여야합니다. 이 작업을 수행하는 더 좋은 방법이 있는지 궁금합니다.
이 어떤 모양의이 계획을 설명 : 여기에
은 대체 버전인가? SQL 피들을 제공 할 수 있다면 사람들은 더 많은 도움을받을 것입니다. – Woot4Moo매번 병목이 될 수있는 전체 테이블 스캔을하는 것처럼 보입니다. – Woot4Moo
인덱스를 사용하여 쿼리 실행 계획과 테이블 정의를 게시하고 각 테이블의 행 수 계산을 사용하십시오. –