between 쿼리 성능개선 문의 드려요 0 2 1,210

by 파워간 [2018.10.16 15:28:25]


 t1 (startipnum number,

endipnum number,

locationid number)

 

테이블은 위처럼 구성되어 있습니다.

각 유저들의 ip가 들어오면서 start 지점과 end 지점 사이의 값으로 locationid 를 알아내는 쿼리입니다.

 

현재 사용하고 있는 쿼리의 경우

select locationid

from t1

where :userip between startipnum and endipnum

and rownum = 1;

 

:userip가 바인드 변수로 들어오고 있음

add constaint t1 primary key (startipnum, endipnum)

해당 pk 인덱스가 있어서 현재는 pk index를 ragne scan 하면서 풀리고 있습니다.

 

하지만 해당 쿼리가 테이블로우 자체가 많아 쿼리가 느려 빨리 풀렸으면 하여 문의 드립니다.

funcation based index를 생각해보았지만 between 형태는 못만드는거 같아서

 

해결책좀 알려주세요 ~

by 마농 [2018.10.16 16:19:00]
SELECT locationid
  FROM t1
 WHERE startipnum = (SELECT MAX(startipnum)
                       FROM t1
                      WHERE startipnum <= :userip
                     )
   AND endipnum >= :userip
   AND ROWNUM = 1
;

 


by 파워간 [2018.10.16 16:36:30]

 

진짜 걸리적 거리던 쿼린데 이런방법으로 해결을 하다니

 

감사합니다.

 

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