오랜만에 커뮤니티를 찾아와 도움을 못 되고 도움 받고자 글을 올리게 되었습니다.
# 테이블 스키마 (API_LOG)
channel_id varchar(10) DEFAULT NULL COMMENT 채널아이디,
reg_dt timestamp NOT NULL DEFAULT 0000-00-00 00:00:00 COMMENT 등록일시,
model_name varchar(100) DEFAULT NULL COMMENT 모델명,
serial_no varchar(100) DEFAULT NULL COMMENT 시리얼 번호,
...
위와 같이 컬럼들이 존재하며 현재 데이터는 1500만건을 넘었습니다.
데이터는 2013-12-06 부터 현재까지 생성되어 있습니다.
필요한 결과 값은 일자별 (reg_dt) UV (Unique View) 통계를 서비스 오픈일 부터 당일까지 추출해 달라는 요구 사항힙니다.
Unique 기준은 CONCAT(serial_no, model_name) 와 같이 문자열을 합쳐 Unique해야 합니다.
해서 제가 쿼리를 생성한 쿼리가 다음와 같습니다.
select '2014-01-01' as stat_dt, count(distinct(concat(serial_no, model_name))) as stat_uv from API_LOG where reg_dt <= '2014-01-02';
이런 식으로 일자별 UV값을 구해 임시 테이블에 insert하도록 구현했습니다.
문제는 reg_dt에 index 설정이 되어 있으나 데이터 row수가 1500만건이나 되니 2014년으로 넘어오면서
하루 쿼리 수행 시간이 50초를 넘고 있습니다.
일자별 UV를 구해야 하기 때문에 2013-12-06 데이터 생성 처음부터 증가한 일자별로 매번 쿼리를 날려야 하는데
점점 속도가 저하되는 현상이 있습니다.
이런 경우 어떤 식으로 쿼리를 해야 하는지 ? 또는 다른 방법이 있는지 도움 부탁 드립니다.
|