안녕하세요.
오늘날짜에 해당되는 데이터를 불러오려고 REGEXP_SUBSTR를 사용하여 기간조건을 걸었습니다.
해당조건으로 쿼리실행시 5~6초 정도 시간이 걸리는데 줄일수있는 쿼리 수정이나 설정이 있을까요?
1. 뷰테이블 : 타 시스템에서 조회하는 데이터라 수정불가능
| No | user_nm | wrk_stat | wrk_peri |
| 1 | 홍길동 | 휴가 | 2023-02-01~2023-02-07 |
| 2 | 철수 | 외근 | 2023-02-06~2023-02-07 |
| 3 | 영수 | 출장 | 2023-02-01~2023-02-20 |
2. 사용중인 쿼리 : 오늘날짜에 해당되는 데이터 조회
SELECT
b.WRK_STAT
, a.USER_NM
,b.WRK_PERI
from USR a,
VW_WRK b
WHERE 1=1
AND a.usr_no = b.usr_no(+)
AND TO_CHAR(SYSDATE,'YYYY-MM-DD') >= REGEXP_SUBSTR(b.WRK_PERI, '[^~]+', '1', '1')
AND TO_CHAR(SYSDATE,'YYYY-MM-DD') <= REGEXP_SUBSTR(b.WRK_PERI, '[^~]+', '1', '2')
1. 정규식보다는 일반 문자함수가 더 빠릅니다. SUBSTR 으로 교체
2. 시작일 비교는 SUBSTR 안해도 될 듯 합니다. SUBSTR 없이 항목 자체로 비교
3. 아우터 조인 후에 조건을 주면 아우터 조인이 의미 없습니다. 이너조인으로 교체
4. 현재 설계를 바꾸지 않는다면? 어차피 풀스캔입니다.
5. 설계를 바꾸는 방법
- 시작일, 종료일로 컬럼을 나누고
- (종료일, 시작일) 순서로 결합 인덱스를 설정. (오늘 날짜 기준 조회는 종료일 인덱스가 유리함)
답변감사드립니다.
제일좋은 방법은 컬럼을 나누는 방법이 있는지 확인해봐야겠군요