오라클 REGEXP_SUBSTR 검색속도 0 2 2,149

by 밍밍밍밍 [2023.02.06 15:18:23]


안녕하세요.

오늘날짜에 해당되는 데이터를 불러오려고 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')

 

by 마농 [2023.02.06 15:56:58]

1. 정규식보다는 일반 문자함수가 더 빠릅니다. SUBSTR 으로 교체
2. 시작일 비교는 SUBSTR 안해도 될 듯 합니다. SUBSTR 없이 항목 자체로 비교
3. 아우터 조인 후에 조건을 주면 아우터 조인이 의미 없습니다. 이너조인으로 교체
4. 현재 설계를 바꾸지 않는다면? 어차피 풀스캔입니다.
5. 설계를 바꾸는 방법
- 시작일, 종료일로 컬럼을 나누고
- (종료일, 시작일) 순서로 결합 인덱스를 설정. (오늘 날짜 기준 조회는 종료일 인덱스가 유리함)
 


by 밍밍밍밍 [2023.02.06 16:38:07]

답변감사드립니다.

제일좋은 방법은 컬럼을 나누는 방법이 있는지 확인해봐야겠군요

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입