PostgreSQL은 어떻게 기본 키의 클러스터 이후에 디스크에서 새 레코드를 물리적으로 주문합니까?


9

PostgreSQL이 디스크에서 레코드를 주문하는 방법을 알아야합니다. 이 경우 docs에 명시된 바와 같이 인덱스 조합을 이용하고 싶습니다 . 이것은 비트 맵을 사용하여 일치하는 행을 가져 와서 실제 위치에 따라 반환합니다. 문제의 테이블이 기본 키로 클러스터되었습니다.

알다시피 PostgreSQL은 클러스터링이 완료된 후에도 자동으로 클러스터링을 계속하지 않습니다 (그러나 특정 인덱스에 따라 클러스터링되었다는 것을 기억합니다). 이제 이것이 기본 키이므로 물리적 스토리지 순서가 그 순서에 따르는 지 궁금합니다 (사실 경우 특정 쿼리에 유리하게 사용하고 싶습니다).

요약하면, PostgreSQL은 특히 클러스터링 후 새로운 레코드를 어떻게 주문합니까?

매우 감사합니다!

답변:


9

postgresql의 행에는 고정 순서가 없습니다. 여유 공간이있는 곳에 레코드가 배치 될뿐만 아니라 이동할 수도 있습니다. 행이 업데이트되면 새 버전의 행이 새 위치에 만들어지고 이전 버전은 진공으로 제거 될 때까지 이전 위치에 계속 존재하기 때문입니다.

CLUSTER 작업은 모든 행을 정렬하지만 실제로 postgresql이 행을 추가하는 방법에는 영향을 미치지 않습니다. 따라서 데이터는 정렬되지 않습니다. 그러나 postgresql은 테이블의 행 순서와 해당 열의 정렬 순서 사이의 각 열에 대한 상관 관계를 유지하는 통계를 유지합니다. 따라서 플래너는 클러스터 작업 후 일부 행이 추가되었거나 업데이트에 의해 이동 된 경우에도 테이블이 여전히 대부분 정렬되어 있다는 통계를 기반으로 계획을 최적화 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.