클러스터 - 인덱스에 따라 테이블 클러스터
클러스터 [(옵션
[, ...])] [table_name
[사용index_name
]]여기서옵션
중 하나 일 수 있습니다 :Verbose [부울
]
클러스터
지침postgresqltable_name
index_name
. 인덱스는 이미 정의되어 있어야합니다table_name
.
테이블이 클러스터링되면 인덱스 정보에 따라 물리적으로 재정렬됩니다. 클러스터링은 일회성 작업입니다. 테이블이 업데이트되면 변경 사항이 클러스터되지 않습니다. 즉, 인덱스 순서에 따라 새 행 또는 업데이트 된 행을 저장하려는 시도는 없습니다. (원하는 경우, 명령을 다시 발행하여 정기적으로 재 클러스터 할 수 있습니다. 또한 테이블 설정FillFactor
100% 미만의 스토리지 매개 변수는 업데이트 중 클러스터 순서를 보존하는 데 도움이 될 수 있습니다. 업데이트 된 행은 충분한 공간을 사용할 수있는 경우 업데이트 된 행이 같은 페이지에 보관되어 있으므로.).
테이블이 클러스터링되면PostgreSQL클러스터 된 색인을 기억합니다. 양식클러스터
이전과 동일한 인덱스를 사용하여 테이블을 Reclusters. 당신은 또한를 사용할 수 있습니다.table_name
클러스터
또는클러스터없이 설정
형태Alter Table
향후 클러스터 작업에 사용할 인덱스를 설정하거나 이전 설정을 지우려면
클러스터
atable_name
Reclusters 호출 사용자가 권한이있는 현재 데이터베이스의 이전에 클러스터 된 모든 테이블을 Reclusters. 이 형태의클러스터
트랜잭션 블록 내부에서 실행할 수 없습니다.
테이블이 클러스터링되면액세스 독점
잠금이 획득되었습니다. 이것은 다른 데이터베이스 작업 (읽기 및 쓰기)이 테이블에서 작동하는 것을 방지합니다.클러스터
완료되었습니다.
table_name
표의 이름 (스키마 자격).
index_name
색인 이름.
Verbose
각 테이블이 클러스터링 될 때 진행 보고서를 인쇄합니다.
부울
선택한 옵션을 켜거나 끄야하는지 여부를 지정합니다. 당신은 쓸 수 있습니다true
, on
또는1
옵션을 활성화하려면거짓
, OFF
또는0
비활성화하려면. 그만큼부울
값도 생략 할 수 있습니다.true
가정합니다.
테이블을 클러스터하려면 하나는 있어야합니다.유지 관리
표에서의 특권.
테이블 내에서 단일 행에 무작위로 액세스하는 경우 테이블의 데이터의 실제 순서는 중요하지 않습니다. 그러나 다른 데이터보다 일부 데이터에 더 액세스하는 경향이 있고 함께 그룹화하는 색인이 있으면이 도움이 될 것입니다.클러스터
. 테이블에서 인덱스 된 값 범위 또는 일치하는 여러 행이있는 단일 인덱스 값을 요청하는 경우클러스터
인덱스가 일치하는 첫 번째 행의 테이블 페이지를 식별하면 일치하는 다른 모든 행은 이미 같은 테이블 페이지에있을 것이므로 디스크 액세스를 저장하고 쿼리 속도를 높이기 때문에 도움이됩니다..
클러스터
지정된 인덱스의 인덱스 스캔을 사용하여 테이블을 다시 정렬 할 수 있거나 (인덱스가 B- 트리 인 경우) 순차적 스캔과 정렬을 할 수 있습니다. 플래너 비용 매개 변수 및 사용 가능한 통계 정보를 기반으로 더 빠른 방법을 선택하려고 시도합니다.
while클러스터
실행 중입니다.search_path일시적으로 변경PG_CATALOG, PG_TEMP
.
인덱스 스캔이 사용되면 테이블 데이터가 색인 순서로 포함 된 테이블의 임시 사본이 작성됩니다. 테이블의 각 지수의 임시 사본도 생성됩니다. 따라서 디스크에 테이블 크기의 합 및 인덱스 크기와 동일한 디스크의 여유 공간이 필요합니다.
순차적 인 스캔 및 정렬을 사용하면 임시 정렬 파일도 생성되므로 피크 임시 공간 요구 사항이 테이블 크기의 두 배나 인덱스 크기가됩니다. 이 방법은 종종 인덱스 스캔 방법보다 빠르지 만 디스크 공간 요구 사항을 견딜 수없는 경우 일시적으로 설정 하여이 선택을 비활성화 할 수 있습니다enable_sorttooff
.
설정하는 것이 좋습니다maintenance_work_mem합리적으로 큰 값으로 (그러나 당신이 할 수있는 RAM의 양보다클러스터
작동) 클러스터링 전.
플래너는 테이블 순서에 대한 통계를 기록하기 때문에 실행하는 것이 좋습니다분석
새로 클러스터 된 테이블에서. 그렇지 않으면 플래너는 쿼리 계획을 열악하게 선택할 수 있습니다.
왜냐하면클러스터
클러스터 된 인덱스를 기억하고, 처음으로 클러스터링 원하는 테이블을 클러스터링 한 다음 실행하는 주기적 유지 보수 스크립트를 설정할 수 있습니다클러스터
매개 변수가 없어 원하는 테이블이 주기적으로 재고가되도록합니다.
각 백엔드 실행클러스터
의 진전을보고합니다PG_STAT_PROGRESS_CLUST
보기. 보다섹션 27.4.2자세한 내용.
지정된 분할 된 인덱스의 파티션을 사용하여 분할 된 테이블 클러스터를 클러스터링합니다. 분할 된 테이블을 클러스터링 할 때 인덱스가 생략되지 않을 수 있습니다.클러스터
파티션 된 테이블의 트랜잭션 블록 내부에서 실행할 수 없습니다.
테이블 클러스터직원
지수를 기준으로직원 _ind
:
직원을 사용하는 클러스터 직원 _ind;
클러스터직원
이전에 사용 된 것과 동일한 인덱스를 사용한 테이블 :
클러스터 직원;
클러스터 이전에 클러스터 된 데이터베이스의 모든 테이블 :
클러스터;
없음클러스터
SQL 표준의 명령문.
다음 구문이 전에 사용되었습니다PostgreSQL17 및 여전히 지원됩니다 :
클러스터 [Verbose] [table_name
[사용index_name
]]
다음 구문이 전에 사용되었습니다PostgreSQL8.3 및 여전히 지원됩니다 :
클러스터index_name
ontable_name
문서에 올바른 것이없는 것이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면