데이터 분할 - Mysql 파 티 션 시트 관리 및 유지보수
http://blog.csdn.net/jhq0113/article/details/44592865
Mysql 파 티 션 시트 생 성 에 대해 참고 할 수 있 습 니 다:
http://blog.csdn.net/jhq0113/article/details/44593511
앞에서 언급 했 듯 이 Mysql 은 4 가지 표 의 파 티 션 을 지원 합 니 다. 즉, RANGE 와 LIST, HASH 와 KEY 입 니 다. 그 중에서 RANGE 와 LIST 는 비슷 하고 한 구간 에 따라 파 티 션 을 진행 합 니 다. HASH 는 KEY 와 유사 하 며 특정한 알고리즘 에 따라 필드 를 구분 합 니 다.
RANGE 와 LIST 구역 관리:
사례: 채 팅 기록 표 가 있 는데 사용자 가 수천 명 정도 되 고 표 에 대해 사용자 에 따라 일정한 입도 의 수준 으로 분할 되 었 습 니 다. 현 재 는 일부 표 에 저 장 된 기록 이 비교적 많 기 때문에 다음 과 같은 방식 으로 표 에 대해 구역 을 나 누 었 습 니 다. 구역 의 장점 은 구역 을 동적 으로 바 꿀 수 있 고 구역 을 삭제 한 후에 데이터 도 함께 삭 제 됩 니 다. 예 를 들 어 채 팅 기록 은 2 년 만 저장 할 수 있 습 니 다.그러면 시간 에 따라 구역 을 나 누고 2 년 전의 구역 을 정기 적 으로 삭제 할 수 있 으 며 동적 으로 새로운 구역 을 만 들 면 좋 은 데이터 유 지 를 할 수 있다.
파 티 션 시트 에서 만 든 문 구 는 다음 과 같 습 니 다.
DROP TABLE IF EXISTS `msgss`;
CREATE TABLE `msgss` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT ' ',
`sender` int(10) unsigned NOT NULL COMMENT ' ID',
`reciver` int(10) unsigned NOT NULL COMMENT ' ID',
`msg_type` tinyint(3) unsigned NOT NULL COMMENT ' ',
`msg` varchar(225) NOT NULL COMMENT ' ',
`atime` int(10) unsigned NOT NULL COMMENT ' ',
`sub_id` tinyint(3) unsigned NOT NULL COMMENT ' ID',
PRIMARY KEY (`id`,`atime`,`sub_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
/********* **************/
PARTITION BY RANGE (atime) SUBPARTITION BY HASH (sub_id)
(
PARTITION t0 VALUES LESS THAN(1451577600)
(
SUBPARTITION s0,
SUBPARTITION s1,
SUBPARTITION s2,
SUBPARTITION s3,
SUBPARTITION s4,
SUBPARTITION s5
),
PARTITION t1 VALUES LESS THAN(1483200000)
(
SUBPARTITION s6,
SUBPARTITION s7,
SUBPARTITION s8,
SUBPARTITION s9,
SUBPARTITION s10,
SUBPARTITION s11
),
PARTITION t2 VALUES LESS THAN MAXVALUE
(
SUBPARTITION s12,
SUBPARTITION s13,
SUBPARTITION s14,
SUBPARTITION s15,
SUBPARTITION s16,
SUBPARTITION s17
)
);
상기 문 구 는 RANGE 에 따라 구 분 된 세 개의 메 인 파 티 션 을 만 들 었 고 각 메 인 파 티 션 아래 에 HASH 에 따라 구 분 된 여섯 개의 하위 파 티 션 이 있 습 니 다.
테스트 데이터 삽입:
INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH',UNIX_TIMESTAMP(NOW()),1);
INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 2',UNIX_TIMESTAMP(NOW()),2);
INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 3',UNIX_TIMESTAMP(NOW()),3);
INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 10',UNIX_TIMESTAMP(NOW()),10);
INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 7',UNIX_TIMESTAMP(NOW()),7);
INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 5',UNIX_TIMESTAMP(NOW()),5);
INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH',1451577607,1);
INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 2',1451577609,2);
INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 3',1451577623,3);
INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 10',1451577654,10);
INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 7',1451577687,7);
INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 5',1451577699,5);
INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH',1514736056,1);
INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 2',1514736066,2);
INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 3',1514736076,3);
INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 10',1514736086,10);
INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 7',1514736089,7);
INSERT INTO `msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`) VALUES(1,2,0,'Hello HASH 5',1514736098,5);
파 티 션 분석 진행:
EXPLAIN PARTITIONS SELECT * FROM msgss;
파 티 션 정 보 를 다음 과 같이 감지 할 수 있 습 니 다.
검출 구역 데이터 분포:
EXPLAIN PARTITIONS SELECT * FROM msgss WHERE `atime`<1451577600;
EXPLAIN PARTITIONS SELECT * FROM msgss WHERE `atime`>1451577600 AND `atime`<1483200000;
EXPLAIN PARTITIONS SELECT * FROM msgss WHERE `atime`>1483200000 AND `atime`<1514736000;
EXPLAIN PARTITIONS SELECT * FROM msgss WHERE `atime`>1514736000;
결과: 첫 번 째 문 구 는 t0 의 모든 하위 구역 만 스 캔 했 고 두 번 째 문 구 는 t1 의 모든 하위 구역 만 스 캔 했 으 며 세 번 째 네 번 째 문 구 는 각각 t2 의 모든 하위 구역 만 스 캔 하여 표 의 구역 과 데이터 분포 가 성공 적 임 을 증명 했다.
수요: 현재 2017 년 이 므 로 2015 년 의 모든 채 팅 기록 을 삭제 해 야 하지만 2016 년 의 채 팅 기록 을 보류 하고 2017 년 의 데이터 도 정상적으로 구역 별로 저장 할 수 있 습 니 다.
상기 수 요 를 실현 하려 면 두 단계 가 필요 합 니 다. 첫 번 째 단 계 는 t0 구역 을 삭제 하고 두 번 째 단 계 는 새로운 규칙 에 따라 구역 을 재 구축 해 야 합 니 다.
파 티 션 구문 삭제:
ALTER TABLE `msgss` DROP PARTITION t0;
파 티 션 구문 재 구축:
ALTER TABLE `msgss` PARTITION BY RANGE (atime) SUBPARTITION BY HASH (sub_id)
(
PARTITION t0 VALUES LESS THAN(1483200000)
(
SUBPARTITION s0,
SUBPARTITION s1,
SUBPARTITION s2,
SUBPARTITION s3,
SUBPARTITION s4,
SUBPARTITION s5
),
PARTITION t1 VALUES LESS THAN(1514736000)
(
SUBPARTITION s6,
SUBPARTITION s7,
SUBPARTITION s8,
SUBPARTITION s9,
SUBPARTITION s10,
SUBPARTITION s11
),
PARTITION t2 VALUES LESS THAN MAXVALUE
(
SUBPARTITION s12,
SUBPARTITION s13,
SUBPARTITION s14,
SUBPARTITION s15,
SUBPARTITION s16,
SUBPARTITION s17
)
);
조회 결과 15 년 간 의 데 이 터 는 모두 삭제 되 었 고 나머지 데 이 터 는 다시 구역 을 나 누 어 분포 되 었 다.
미완이다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL에서 JSON 인덱싱 - aarondfrancis사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 말하지만 완전히 정확하지는 않습니다. MySQL로 JSON 열을 인덱싱하는 것은 완전히 가능합니다! 사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.