Int range 파티셔닝
PostgreSQL에서 정수 칼럼 기반의 Int range 파티셔닝을 사용하여 대형 테이블을 분할하고 쿼리 성능을 향상시키는 방법을 설명합니다.
Int range 파티셔닝을 새로 사용하지 마세요. cells와 호환되지 않아 더 이상 사용되지 않습니다. cells 간에 데이터를 마이그레이션할 때 지정된 키 범위에 대한 파티션이 대상 cell에 이미 존재해야 합니다. 더 근본적으로, 파티션 토폴로지는 cell 로컬 구현 세부 사항이며 cell 간 마이그레이션 계약의 일부가 아닙니다. 따라서 대상 cell이 소스 cell의 파티셔닝 방식을 알지 못하더라도 cell 간에 데이터를 마이그레이션할 수 있어야 합니다. 자세한 내용은 작업 항목 604729 를 참조하세요. 설명 # Int range 파티셔닝은 정수 칼럼을 기반으로 대형 테이블을 더 작고 관리하기 쉬운 청크로 분할하여 각 파티션이 특정 범위의 정수를 포함하도록 하는 기법입니다. 이 기법은 행 수가 많은 테이블에 특히 유용하며, 쿼리 성능을 크게 향상시키고 스토리지 요구사항을 줄이며 유지 관리 작업을 단순화할 수 있습니다. 이 유형의 파티셔닝이 잘 작동하려면 대부분의 쿼리가 특정 int 범위 내의 데이터에 접근해야 합니다. 더 자세히 살펴보기 위해, 간소화된 merge_request_diff_files 스키마를 상상해 보겠습니다: CREATE TABLE merge_request_diff_files ( merge_request_diff_id INT NOT NULL, relative_order INT NOT NULL, PRIMARY KEY (merge_request_diff_id, relative_order)); 이제 UI에서의 일반적인 쿼리가 특정 int 범위 내의 데이터를 표시한다고 가정해 보겠습니다: SELECT * FROM merge_request_diff_files WHERE merge_request_diff_id > 1 AND merge_request_diff_id < 10 LIMIT 100 테이블이 merge_request_diff_id 칼럼으로 파티셔닝된다면 기본 테이블은 다음과 같습니다: CREATE TABLE merge_request_diff_files ( merge_request_diff_id INT NOT NULL, relative_order INT NOT NULL, PRIMARY KEY (merge_request_diff_id, relative_order)) PARTITION BY RANGE(merge_request_diff_id); 파티셔닝된 테이블의 기본 키는 기본 키 정의의 일부로 파티션 키를 포함해야 합니다. 그리고 테이블에 대한 파티션 목록은 다음과 같을 수 있습니다: merge_request_diff_files_1 FOR VALUES FROM (1) TO (20) merge_request_diff_files_20 FOR VALUES FROM (20) TO (40) merge_request_diff_files_40 FOR VALUES FROM (40) TO (60) 각 파티션은 기본 merge_request_diff_files 테이블과 동일한 구조를 가진 별도의 물리적 테이블이지만, 파티션 키