안녕하세요
현재 4000명의 회원의 1인1일 데이터로 구축했으며 데이터가
30년치정도가 되는 큰 테이블이 있습니다. (약 3천만 Row)
여기에는 연월일 필드가 있으며 year가 인덱스로 걸려있습니다.
이 데이터중 2017년의 자료를 회원별 지역구분으로 그룹하여 Sum(일별값)을 일자별로 조회하는데
쿼리속도가 약 15초 정도 걸립니다.
쿼리문은 대략
select
i.zone_code
,d.ymd
,sum(d.value) as data
from
tbl_mem_info i
left outer join (select mem_id, ymd, value from tbl_mem_data where year=2017) d on i.mem_id=d.mem_id
group by i.zone_code, ymd
order by i.zone_code, ymd
이렇게 짯습니다.
쿼리문 Cost를 보니 2017년 data row를 가져오는데 상당히 큰 Cost가 발생하더라고요...
1. 3천만건 테이블의 연도 인덱스를 태워 한 년도 데이터(120만건)을 가져오는 속도가 위와 같다면 평범한것인가요?
2. 테이블 설정과 여타 다른 튜닝을 통하여 쿼리속도를 개선하는 방법이 있을까요?
3. 3에서 최대 5초 안에 결과물을 보고싶다면 어떤부분을 개선해야할까요?
postgresql 고수분들의 답변 부탁드립니다.
|