SELECT --+ INDEX ( A TEMP_A_PK )
*
FROM TEMP_A A
WHERE A.DATE = TO_DATE('2022-01-01','YYYY-MM-DD')
AND EXISTS ( SELECT --+ INDEX ( B TEMP_B_PK ) INDEX ( C TEMP_C_PK )
1
FROM TEMP_B B
,TEMP_C C
WHERE B.PK = A.PK
AND C.CODE = B.CODE
AND B.DATE BETWEEN C.FROMDATE AND C.TODATE
-- AND C.GROUP = 'AAA'
)
안녕하세요.
오라클에서 위 예시쿼리의 C.GROUP 조건 주석을 풀고 조회 시 런타임만 돌아가고 데이터가 조회되지않습니다.
인덱스 힌트도줬고..
차라리 C.GROUP 조건을 주석처리하면 데이터가 빠르게 잘 나오는데 AND조건 하나 추가했다고 조회가 안되는게.. 이유를 찾아봐도 잘 해결되지가않습니다.
혹시 원인에대해 아시는부분 있으시면 알려주시면 정말 감사하겠습니다 !
1. 각 테이블의 정보를 주세요.
- 전체 건수 및 조건을 만족하는 건수
- 인덱스 정보
2. 원인은
- Exists 는 조건을 만족하는 자료 하나만 발견되면 바로 멈추게 되는데.
- 해당 조건을 만족하는 자료가 너무 없어서 찾을때까지 멈추지 못하는 듯 하네요.
- 적절한 인덱스가 필요해 보입니다. temp_c(group, code, fromdate, todate)
3. 질문시 유의사항
- DATE , GROUP 등의 예약어를 명칭으로 사용하지 말아 주세요.
- dt, grp 등으로 변경하여 질문해 주세요.