초점을 잘못 맞추신 듯 한데.. 50만개를 불러오면 당연히 datetime 하나만 있는게 빠르겠죠. 그런건 단순히 읽기 I/O의 문제일 뿐이기 때문에 datetime을 part 별로 나눈 부가적인 컬럼이 있으면 그 만큼 데이터 사이즈가 커져서 느려지는게 당연합니다.
이건 그런 문제가 아니고.. part 별로 컬럼을 나눠서 필터링이나 그룹핑 성능을 개선하는 것이 얼마나 의미있느냐의 문제입니다.
자주 사용하는 쿼리에 특정 연도 또는 특정 월이나 시간 같은 것이 WHERE 조건이나 GROUP BY 절에서 사용되고 적절히 인덱스가 구성되어 있다면.. 그런 쿼리의 처리가 빠르기 때문에 저런 구성을 취했다고 보입니다.
하지만.. 본문의 테이블 구조는.. 뭐랄까.. 실제로 각각의 datepart가 사용되기 때문에 나눴다기 보다는.. 그냥 기계적으로 나눈 느낌이 드는데, 이건 그냥 느낌이니 잘못됐다고 단정할 수는 없겠네요. ^^;;