날짜 -> 숫자 데이트변환 후 검색 시 쿼리비용비교?? 0 4 1,019

by 열심열심 [2017.11.28 14:39:33]


하루 수천 수만개 데이터가 쌓이는데 이걸 몇달 치 

조건절을 날짜로 두고 검색하게되면 굉장히 많은 시간이 소모 되는 상태입니다. 

다른 디비 구성 보니 날짜를 숫자로 변경하여 select 하는 곳이 있던데 

date함수 사용과 함수사용x이니 이때 쿼리 코스트가 많이 줄까요? 

ex) 2017-11-01 14:34:32 ~ 2017-11-28 14:37:33 vs 20171101142332 ~ 20171128143733 

 

 

by 마농 [2017.11.28 15:13:38]

글쎄요?
타입 때문에 느리진 않을 것 같은데요.
워낙 자료가 많아서 느린거겠지요.
그리고 "date함수 사용과 함수사용x" 라는 말의 의미가 뭘까요?
기존 쿼리에서 함수를 사용했다는 건가요?
그렇다면 함수 사용이 문제이지 데이터 타입이 문제는 아닐 듯 합니다.


by 열심열심 [2017.11.28 15:43:18]

날짜로 조건절로 where xxxx TO_CHAR(to_date(CALL_DATE, 'yyyyMMdd') 이렇게 비교해서불러 오는데

이걸 숫자로 하면 저렇게 변환 할 필요도 없이 where 20170101< xxxx 하면 되니까 함수 사용도 하지 않고 숫자로만 비교해서 좀 빠르지 않을까 생각해봤어요. 

mariadb에서 30만건이 넘어도 그닥 느리지 않았는데 더 성능좋은 오라클이 쿼리 수행시간이 길어져 웹페이지 안뜨는 현상까지 발생하여서 고민이 많네요 쿼리만 수정하면 될까 싶어서


by 마농 [2017.11.28 16:00:42]

조건 줄 때 컬럼을 가공해서 조건값에 맞추는데... 흔히들 하는 실수입니다.
이렇게 하면 (함수사용에 대한 부담) 에 (인덱스 사용 못하는 부담) 이 더해집니다.
컬럼을 가공해서 조건에 맞추는게 아니라 ===> 조건을 가공해서 컬럼에 맞춰 줘야 합니다.

-- Oracle 날짜 검색 예시 --
-- 변경전(잘못된 예) -
 WHERE TO_CHAR(dt, 'yyyymmdd') = :v_dt
-- 변경후(바른 예) -
 WHERE dt >= TO_DATE(:v_dt, 'yyyymmdd')
   AND dt <  TO_DATE(:v_dt, 'yyyymmdd') + 1

 


by 열심열심 [2017.11.29 13:28:06]

쿼리 뒤져보니 생각보다 훨씬 더 복잡했네요 조금도 생각해보고 

질문할께요

나중에 도움 부탁드립니다. 

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