약 2Mln 개의 레코드가있는 큰 테이블이 있는데이를 파티션하고 싶습니다.MySQL의 파티션 - 기본 키 및 고유 레코드의 오류
ID 열이 PRIMARY AUTO_INCREMENT int (항상 고유해야 함)입니다. 대부분의 쿼리가 WHERE 문을 1 년에 한 번 사용하기 때문에 2016 년에서 2050 년까지 BY RANGE로 분할하려면 "theyear"int (4) 열을 사용했습니다.
파티셔닝 할 때 "myear"키가 PRIMARY KEY 여야한다는 오류가 발생하므로 PRIMARY (id, theyear)라는 다중 컬럼 키를 사용하는 기본 키를 편집했습니다.
그것은 모든 OK, 그러나 그것은 "theyear"열을 확인하기 때문에 내 "ID"열이 더 이상 고유하지 않습니다 너무 ... 나는 삽입 그래서 경우 :
INSERT INTO table (id, theyear) VALUES (1, 2016);
INSERT INTO table (id, theyear) VALUES (1, 2017);
그것은 때문에 오류를 말한다 UNIQUE는 id와 theyear를 모두 확인합니다.
"id"열에서 UNIQUE를 잃지 않고 어떻게 분할을 구현할 수 있습니까?
감사합니다.
연도에 대해 별도의 'unique' 제약 조건을 추가하려 했습니까? – cwallenpoole
나는이 문서를 기초로하고있다 : https://dev.mysql.com/doc/refman/5.7/en/partitioning-range.html,하지만 당신이 기본 키를 변경할 필요가 없다고 생각한다. RANGE 파티션. 그들이 사용하는 모든 예제에는 기본 키가 없습니다. 내가 놓친 게 있니? KEY()로 실수로 파티션을 분할하려고합니까? –
왜 분할 하시겠습니까? 어떤 쿼리가 더 빨리 실행될 것이라고 생각합니까? 그 쿼리와'SHOW CREATE TABLE'을 제공하십시오. 아마도 적절한 색인은 파티셔닝이 빠르거나 빠를 것이라고 주장 할 것입니다. 아마 색인은 YEAR로 시작할 것입니다. 힌트 : http://mysql.rjweb.org/doc.php/partitionmaint –