Int range 파티셔닝
PostgreSQL에서 정수 칼럼 기반의 Int range 파티셔닝을 사용하여 대형 테이블을 분할하고 쿼리 성능을 향상시키는 방법을 설명합니다.
History GitLab 16.8에서 도입됨 . 설명 # 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 테이블과 동일한 구조를 가진 별도의 물리적 테이블이지만, 파티션 키가 지정된 범위에 속하는 행의 데이터만 포함합니다. 예를 들어, 파티션 merge_request_diff_files_1 에는 merge_request_diff_id 칼럼이 1 이상이고 20 미만인 행이 포함됩니다. 이제 이전 예시 쿼리를 다시 살펴보면, 데이터베이스는 WHERE 조건을 사용하여 모든 일치하는 행이 merge_request_diff_files_1 파티션에 있음을 인식할 수 있습니다. 모든 파티션의 모든 데이터를 검색하는 대신에 말이죠. 대형 테이블에서 이는