인덱스로 자주 사용하는 일자 칼럼은 VARCHAR2와 DATE 자료형 중 어떤 것이 더 좋나요?
kimeuij1 수험생

답변 채택시 : 0코아

답변 2 추천 0 조회 56 2019.08.30

날짜에 DATE 자료형을 이용하면 일자의 정합성 체크에는 좋은데, 인덱스로 사용하기에 의문점이 있어서 문의드립니다.

DATE 자료형은 인덱스에서 BETWEEN을 이용하고"="은 이용할 수 없다보니 결합인덱스에 있어서 효율성이 떨이지는 것으로 생각됩니다.

인덱스로 자주 사용해야 하는 날짜 칼럼의 자료형은 VARCHAR2와 DATE 자료형 중 어떤 것이 더 효율적이나요?

고수님들의 의견 구합니다.

댓글 (0)
목록 답변등록
인덱스로 자주 사용하는 일자 칼럼은 VARCHAR2와 DATE 자료형 중 어떤 것이 더 좋나요?
sslee 2019.09.03

안녕하세요.


우선, 해당 컬럼에 날짜 형태의 값 중에서 어떤 형식을 사용할 것인지 먼저 정의가 되어야 할 것 같습니다.

  - 예를 들면, 년월일만 저장한다거나, 년월일시분초 형태로 관리를 한다거나.


시분초까지 관리한다면 굳이 문자형으로 갈 필요는 없을 것 같고 년월일로 관리하기로 했다면 말씀하신대로 문자형이냐 DATE형이나를 고려할 수 있겠는데요.


아시는 것처럼 DATE 자료형은 입력되는 값에 대한 정합성 체크를 해주기 때문에 문자형보다는 효율적입니다.


질문하신 내용중, DATE 자료형은 인덱스에서 "=" 를 이용할 수 없다는 것은 잘못되지 않았나 생각합니다.

  만일 해당 DATE 컬럼 에 데이터를 저장할 때 년월일만 관리한다면 trunc(sysdate)와 같은 형식으로 시분초를 제외하여 저장하면 얼마든지 아래와 같은 형태로 인덱스를 "="로 사용할 수 있습니다.

   DATE 컬럼 = to_date('20190830','yyyymmdd')


  특정 년도 또는 월만 본다면 between으로 처리하면 되고요..


도움이 되시길 바랍니다. :-)

댓글 (0)
인덱스로 자주 사용하는 일자 칼럼은 VARCHAR2와 DATE 자료형 중 어떤 것이 더 좋나요?
airwindtree 2019.09.03

고수는 아닙니다만,

상황에 맞게 사용하시는것을 추천합니다.


1) 년도, 월, 일자를 구분해서 표현해야 하거나, 비교를 많이 해야 하는경우

     VARCHAR 추천  

     예1) WHERE DT BETWEEN '20180101' AND '20180102'

     예2) WHERE DT LIKE '2018%'

     예3) WHERE DT LIKE '201803%'


      * 참고 :  DATETIME 인경우

                 '2018-01-02 14:24:00' 이런식으로 데이터가 들어가기 때문에

                  2018-01-02 00:00:00 이 아닌 이상

                 예1) WHERE DT BETWEEN '20180101' AND '20180102'  에서

                 '2018-01-02 14:24:00' 이런값들은 누락됩니다.


 

2) 로그성, 또는 날짜 계산을 빈번히 하는 경우

    DATETIME 추천

    오늘 등록을 했거나, 수정을 했거나 , 삭제를 했거나.. 로그를 남길때 ....

    오늘로부터 몇시간 지났는지.. 등



댓글 (0)