컬럼 year, month, day 나누면 성능이 더 좋나요? 0 3 1,096

by 도리비 [DB 모델링/설계] [2019.07.02 11:17:54]


기존 DB가 

 idx | year | month | day | hour | minute | date | datetime | value 

이런식으로 되어 있습니다. 그냥 데이터 값만 넣는 곳인데요. select 속도를 높이기 위해서 나눴다고 들었습니다.(date 함수써서 하면 뭐 속도가 더 걸린다네여)

약 50만개를 불러올 경우 이렇게 하면 속도가 좋나여?

by 르매 [2019.07.02 12:05:24]

초점을 잘못 맞추신 듯 한데.. 50만개를 불러오면 당연히 datetime 하나만 있는게 빠르겠죠. 그런건 단순히 읽기 I/O의 문제일 뿐이기 때문에 datetime을 part 별로 나눈 부가적인 컬럼이 있으면 그 만큼 데이터 사이즈가 커져서 느려지는게 당연합니다.

이건 그런 문제가 아니고.. part 별로 컬럼을 나눠서 필터링이나 그룹핑 성능을 개선하는 것이 얼마나 의미있느냐의 문제입니다.

자주 사용하는 쿼리에 특정 연도 또는 특정 월이나 시간 같은 것이 WHERE 조건이나 GROUP BY 절에서 사용되고 적절히 인덱스가 구성되어 있다면.. 그런 쿼리의 처리가 빠르기 때문에 저런 구성을 취했다고 보입니다.

하지만.. 본문의 테이블 구조는.. 뭐랄까.. 실제로 각각의 datepart가 사용되기 때문에 나눴다기 보다는.. 그냥 기계적으로 나눈 느낌이 드는데, 이건 그냥 느낌이니 잘못됐다고 단정할 수는 없겠네요. ^^;;

 


by jkson [2019.07.02 14:00:00]

year, month, day, hour가 의미가 있는 하나의 데이터로 사용한다면 저렇게 구성해도 됩니다.

예를들어 전체 데이터중 각 월의 10일 데이터만 추출한다든지..

각 날짜의 2시 데이터만 추출한다든지..

그런데 그런게 아니라면 나눌 필요 없을듯요.


by 우리집아찌 [2019.07.02 16:50:34]

동일 시간때만 구하는경우는 빠르지만

어제 11시부터 오늘아침 10시까지 데이터라면 애매하죠

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