파티셔닝 쿼리 여쭤봅니다. 0 3 807

by 토마톰 [MySQL] [2019.11.01 11:22:25]


안녕하세요.

SELECT seq
	FROM summaryMedia_test
	WHERE date_summary >= '2019-10-02'
	AND date_summary <= '2019-10-31'
	AND account_id = '11111111111'

위와같은 기본쿼리 결과가 최종적으로 range 안의 데이터를 group by 하여 sum을 하는데 문제가 90만row가 넘기에 파티셔닝을 진행하고자합니다.

분할하고자 하는 기준은 위 결과를 빨리 뽑을 수 있도록 월별로 한번 나눠주고 account_id로도 나누고싶습니다.

어떻게 해야할까요?? date_summary는 DATE 타입이며 account_id는 varchar 타입 입니다.

by 우리집아찌 [2019.11.01 11:34:21]

90만으로 파티셔닝 하긴 좀 그렇긴한데요(너무 작아요)

답변하자면 월단위로 조회가 많으신거 같으니 월로 파티셔닝 하면 되시고 account_id 가 유니크 하시면 인덱스(글로벌 비파티션:성능고도화책에는 그렇게 표기)잡으시거나 data summary 조회가 모든 쿼리에 있다면 local index로 설정하시면 됩니다


by 토마톰 [2019.11.01 11:50:43]

총 row수는 3000만이 약간 넘습니다.

그렇다면 월단위로 파티셔닝을 진행한다고하면 

ALTER TABLE summaryMedia_test
PARTITION BY RANGE (YEAR(`date_summary`))
SUBPARTITION BY HASH (MONTH(`date_summary`))
SUBPARTITIONS 12
(
	PARTITION p2018 VALUES LESS THAN (2019) ENGINE = InnoDB,
	PARTITION p2019 VALUES LESS THAN (2020) ENGINE = InnoDB
);

이런식으로 진행이되는건가요? 아니라면 쿼리조언좀 부탁드리겠습니다.


by 우리집아찌 [2019.11.01 13:04:17]

mysql 이셨네요 월단위로 하실거면 그냥 월단위로 헤인지 파티션이면 될거같은데요 서브파티션시 해쉬로 하면 저렇게 가능한지 모르겠습니다 보통 키값으로 몇개 (서브파티션 지정수) 나누어서 들어갈건데요 

range는 월단위로 하시고 

마리아db에서는 파티션 테이블 작성시 pk도 가능했습니다 필요에 따라서 관리하시면 됩니다

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