2017-10-25 10 views
1

mysql을 사용하여 Partitioned 테이블을 만들려고하지만 파티션 수를 지정하고 싶지 않습니다. 예를 들어 주어진 테이블에서 각 지역에 대해 100,000 개가 넘는 레코드가 있습니다. 나는 그 지역을 모른다. 그들은 나중에 올 것이다. 그래서 파티션의 수는 지역에 따라 증가해야하지만 신텍스는 다른 값으로 여러 행을 삽입하더라도 단일 파티션을 생성합니다.MYSQL에서 키 기반 테이블 파티셔닝을 사용하여 동적 파티션 수를 만드는 방법은 무엇입니까?

파티션 수를 언급하지 않았습니다.

CREATE TABLE `members` (
     `firstname` varchar(25) NOT NULL, 
     `lastname` varchar(25) NOT NULL, 
     `username` varchar(16) NOT NULL, 
     `email` varchar(35) DEFAULT NULL, 
     `region` varchar(10) DEFAULT NULL 
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 
    PARTITION BY KEY (region); 

답변

0

https://dev.mysql.com/doc/refman/5.7/en/partitioning-hash.html는 말한다 :

당신이 PARTITIONS 절, 같은 문제가 KEY 파티셔닝에 적용 1.

에 파티션 기본값의 수를 포함하지 않는 경우.

각 지역마다 하나의 파티션이 필요하다고 생각하는 것 같습니다. 너는하지 않는다. 각 파티션에 둘 이상의 영역이 저장되어있을 수 있습니다. 물론 예를 들어 8 개의 파티션을 가지고 있지만 12 개의 다른 영역을 저장하는 경우에는 이것이 사실이어야합니다. 이것은 문제가되지 않습니다.

KEY 또는 HASH 파티션 방법에서 ALTER TABLE을 사용하여 파티션 수를 변경할 수 있지만 ALTER TABLE을 다시 사용할 때까지 고정되어 새 파티션 세트에 대한 행이 재분배됩니다.

대신 LIST 파티션을 사용하여 각 영역이 저장되는 영역을 제어 할 수 있습니다. ALTER TABLE을 사용하여 새 영역을 지원할 수 있도록 파티션 정의를 변경할 수 있습니다.

분할을 전혀 사용하지 않아도된다는 점을 말씀드립니다. 많은 개발자들이 파티션 분할이 얼마나 도움이되는지 과대 평가합니다. 단순히 인덱스를 올바르게 사용하면 쿼리의 성능을 향상시킬 수 있습니다.

0

PARTITION BY KEY() 또는 LIST() 또는 HASH()은 목표가 성능을 향상 시키면 쓸모가 없습니다. 대신, region으로 시작하는 적절한 색인을 갖는 것도 마찬가지입니다.

아니요, 새로운 "영역"이 생길 때 새로운 파티션을 추가하는 것은 실용적이지 않습니다.

파티션 당 100K 개의 행만 있으면 테이블이 PARTITIONing으로 거의 처리되지 않을 수 있습니다.

PARTITIONs의 개수에는 제한이 있습니다. 하드 한도는 8K입니다. 실제 한계는 50이다.

more discussion.