해시 색인에는 4 가지 종류의 페이지가 있습니다. 메타 페이지 (Page Zero)는 정적으로 할당 된 제어 정보를 포함합니다. 기본 버킷 페이지; 오버 플로우 페이지; 그리고 해제되고 재사용 할 수있는 오버플로 페이지를 추적하는 비트 맵 페이지. 해결 목적으로 비트 맵 페이지는 오버 플로우 페이지의 하위 집합으로 간주됩니다.
인덱스를 스캔하고 튜플을 삽입하려면 주어진 튜플이 위치 해야하는 버킷을 찾아야합니다. 이를 위해서는 메타지에서 버킷 카운트, 하이 마스크 및 로우 마스크가 필요합니다. 그러나 성능의 이유로 인해 그러한 작업마다 메타지를 잠그고 고정 해야하는 것은 바람직하지 않습니다. 대신, 우리는 각 백엔드의 relcache 항목에 메타지의 캐시 된 사본을 유지합니다. 마지막 캐시 새로 고침 이후 대상 버킷이 분할되지 않은 한 올바른 버킷 매핑이 생성됩니다.
기본 버킷 페이지 및 오버플로 페이지는 주어진 인덱스가 버킷 수에 비해 오버플로 페이지가 더 필요할 수 있으므로 독립적으로 할당됩니다. 해시 코드는 흥미로운 주소 지정 규칙 세트를 사용하여 다양한 오버 플로우 페이지를 지원하면서 기본 버킷 페이지를 생성 한 후에는 이동할 필요가 없습니다.
색인화 된 테이블의 각 행은 해시 인덱스의 단일 인덱스 튜플로 표시됩니다. 해시 인덱스 튜플은 버킷 페이지에 저장되며 존재하는 경우 오버플로 페이지. 하나의 인덱스 페이지에서 해시 코드로 정렬 된 인덱스 항목을 유지하여 검색 속도를 높이므로 인덱스 페이지에서 이진 검색을 사용할 수 있습니다. 그러나 버킷의 다른 색인 페이지에서 해시 코드의 상대적 순서에 대한 * No * 가정이 있습니다.
해시 지수를 확장하기위한 버킷 분할 알고리즘은 너무 복잡하지만 여기서 언급 할 가치가 없지만src/backend/access/hash/readme
. 분할 알고리즘은 충돌 안전하고 성공적으로 완료되지 않으면 다시 시작할 수 있습니다.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면