약 40,000 개의 비즈니스에 대해 매주 보는 통계를 저장하는 테이블이 있으며 테이블은 2.2M 레코드를 전달하고 작업 속도를 느리게하기 시작합니다. 작업 속도를 높이기 위해 파티션을보고 있습니다. 하지만 최선을 어떻게해야할지 모르겠다.기본 키 및 concatonated 고유 인덱스가있는 파티션 MySQL 테이블
내 ORM은 기본 키로 id 필드가 필요하지만 해당 필드는 데이터와 관련이 없으며 연도, 주 번호 및 비즈니스 ID 필드에 고유 인덱스를 사용하고 있습니다.
기본 맵을 파티션 맵에 포함시켜야하므로 기본 구성 방법을 잘 모릅니다.
현재 내가 가지고있는
... 일주일에CREATE TABLE `weekly_views` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`business_id` int(11) NOT NULL,
`year` smallint(4) UNSIGNED NOT NULL,
`week` tinyint(2) UNSIGNED NOT NULL,
`hits` int(5) NOT NULL,
`created` timestamp NOT NULL ON UPDATE CURRENT_TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
UNIQUE `search` USING BTREE (business_id, `year`, `week`),
UNIQUE `id` USING BTREE (id, `week`)
) ENGINE=`InnoDB` AUTO_INCREMENT=2287009 DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ROW_FORMAT=COMPACT CHECKSUM=0 DELAY_KEY_WRITE=0 PARTITION BY LIST(week) PARTITIONS 52 (PARTITION p1 VALUES IN (1) ENGINE = InnoDB,
PARTITION p2 VALUES IN (2) ENGINE = InnoDB,
PARTITION p3 VALUES IN (3) ENGINE = InnoDB,
PARTITION p4 VALUES IN (4) ENGINE = InnoDB,
(5 ... 51)
PARTITION p52 VALUES IN (52) ENGINE = InnoDB);
하나 개의 파티션을 나눌 수있는 유일한 논리적 인 방법을 보였다. 내가 'business_id = xx and week = xx and year = xx'를 사용하여 현재 주/비즈니스에 대한 레코드를 검색하면 모두 검색하지 않고 사용할 파티션을 알 수 있습니다. 그러나 결과를 얻고 ORM을 통해 저장하면 id 필드를 사용하고 사용할 파티션을 알지 못합니다.
사용자 지정 쿼리를 사용하여 삽입하거나 업데이트 할 수 있다고 생각합니다. 원래 ORM이 지원하지 않으므로이 작업을 수행하지 않았습니다.
나는 이것에 대해 올바른 방법을 사용하고 있습니까? 아니면 이와 같은 테이블을 파티션하는 더 좋은 방법이 있습니까?
도움 주셔서 감사합니다.
파티션은 내부 메커니즘이므로 삽입/업데이트 쿼리를 걱정하거나 변경할 필요가 없습니다. – georgecj11