반응형
스크립트를 작성할 때, '좌변을 가공하지 말라'는 이야기를 들었는데
왜 그럴까요?
아래와 같은 경우에 DB 인덱스를 사용할 수 없다고 합니다.
- 인덱스 컬럼이 비교되기 전에 변형이 일어나는 경우
- 부정형으로 조건을 기술(not)한 경우
- 인덱스 컬럼이 NULL로 비교되는 경우
- 옵티마이저가 필요에 따라 상기 적용원칙을 준수했음에도 불구하고 특정 인덱스의 사용을 취사선택함으로써 사용되지 않는 경우
좌변을 가공하게 되면 인덱스를 사용할 수 없으므로
DB 컬럼을 가공하지 않고, 상수 부분을 가공해서 사용하도록 작성하는 것이 바람직합니다.
[ 예시 ]
1) 올바르지 않은 예시 (좌변을 가공)
아래와 같이 좌변의 PROC_DATE를 가공하여 사용하게 되면
200 row(s) fetched - 507ms (+64ms) - 1 warning(s) -> 이만큼 시간이 소요됩니다.
2) 올바른 예시 (상수를 가공)
아래와 같이 상수부분을 가공하여 사용하게 되면
200 row(s) fetched - 33ms (+78ms) - 1 warning(s) -> 이만큼 시간이 소요됩니다.
507 ms -> 33 ms로 조회 속도가 빨라진 것을 확인할 수 있습니다.
DB 컬럼을 가공하지 않고, 상수 부분을 가공해서 사용하도록 해봅시다!
반응형
'Database > Oracle' 카테고리의 다른 글
[Oracle] comment로 테이블, 컬럼 찾기 (2) | 2022.08.03 |
---|---|
[Oracle] 오라클 날짜, 한글 요일 구하기 (Feat. TO_CHAR) (0) | 2022.07.01 |
[Oracle] 오라클 TRUNC 함수 사용법 (날짜, 시간, 소수점 절사하기) (0) | 2022.06.30 |
[Oracle] 천단위 구분기호 출력하는 방법 (0) | 2022.06.23 |
[Oracle] 해당 월의 말일자만 조회하기, 가장 최근 일자만 조회하기 (Feat. LAST_DAY 함수) (0) | 2022.06.22 |