Oracle 19c 환경입니다.
테이블은 다음처럼 단순히 다음과 같습니다.
select * from obj where :b1='Y' or object_id=:B2;
조건에서 :B1='Y' 라는 조건에 OR 가 있어 OBJECT_ID 에는 Index 가 있음에도 Full Scan 을 수행합니다.
물론 SQL 에서 UNION 형태로 빼면 되겠으나 업무상 SQL 변경은 어렵습니다. hidden parameter 나 hint 로 or expansion 가능 할까요?
==
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 730912574
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1295 | 608K| 412 (1)| 00:00:05 |
|* 1 | TABLE ACCESS FULL| OBJ | 1295 | 608K| 412 (1)| 00:00:05 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
1 - filter(:B1='Y' OR "OBJECT_ID"=TO_NUMBER(:B2))
|