[화면에 조회조건이 (B, C, D, E) 4개 있습니다.]
조회조건이 1~4개까지 들어오는 상황이라
NVL을 사용해서 하나의 쿼리에서 다 사용할 수 있게 하였습니다.
============================================================
[TEST](총 117건)
A(PK)
B
C
D
E
============================================================
SELECT /*+index (TEST TEST_PK) */
count(1) as CNT
FROM rcpt_plan
WHERE
B = NVL(:I_B,B)
AND C LIKE '%'||NVL(:I_C,C)||'%'
AND D = NVL(:I_D, D)
AND E = NVL(:I_E, E)
============================================================
그런데 문제점이 속도가 엄청나게 차이가 난다는 것입니다.
[WHERE절을 뺄 경우]
Index Full Scan으로 인하여 63msec가 나왔습니다.
[WHERE절이 있을 경우]
Table Access Full로 인하여 3sec가 나왔습니다.
117건 밖에 안되는 상황인데 Table Access Full이 난다 하더라도
빨리 나와야 되는게 아닌가요;; 전 도무지 이유를 모르겠습니다.
[WHERE절이 있는 경우]는 힌트를 줘도, A=A라는 PK조건을 줘도
Table Access Full가 나옵니다.
왜 그런지 알 수 있을까요?? |