쿼리를 날려보면 10초정도 걸렸는데..
ibatis에 연계해서 하면 이상하게 time out이 나버린다.

 select 날짜, 정보, 전화번호, ROW_NUMBER() OVER(PARTITION BY 날짜 ORDER BY 순위) AS 절대순위
 from 테이블
 where 날짜 between '20120228' and '20120329'  --- 수행시간 15초정도?

타임아웃이 나는 원인을 추적하기 위해 log4j로그도 찍어봤는데... 특별한 이유도 못찾았고...
아래와 같이 preparedstatement 가 타도록 #필드명# 형태로 선언했다.

...
 select 날짜, 정보, 전화번호, ROW_NUMBER() OVER(PARTITION BY 날짜 ORDER BY 순위) AS 절대순위
 from 테이블
 where 날짜 between #startday# and #endday#
... 

그런데 신기한게... 쿼리에서 싱글쿼테이션을 빼고 아래와 같이 쿼리를 날리면 1분이 넘게 걸린다

 select 날짜, 정보, 전화번호, ROW_NUMBER() OVER(PARTITION BY 날짜 ORDER BY 순위) AS 절대순위
 from 테이블
 where 날짜 between 20120228 and 20120329  --- 1분이 넘음

 

혹시나 해서 아래와 같이 ibatis에서 설정을 바꾸니 잘되었다. (참고로 '날짜' 필드는 nvarchar(8))
입력값을 강제로 convert후 하도록 하니 해결되었다.

DB플랜을 보면,

1) 날짜 between '20120228' and '20120329' 

2) 날짜 between convert(nvarchar(8), 20120228) and convert(nvarchar(8), 20120329)

3) 날짜 between 20120228 and 20120329 

1번 2번은같고, 3번은 달랐다... 알수없는 세상

 

 

해결..방법은 ibatis에서 xml을 다음과 같이 명시적으로 convert후 찾게했다

where 날짜 between #startday# and #endday#  

between convert(nvarchar(8), #startday#) and convert(nvarchar(8), #endday#)

+ Recent posts