해시 인덱스
GitLab v19.4요약
PostgreSQL은 일반적인 B-tree 인덱스 외에 해시 인덱스도 지원합니다. 해시 인덱스 작업은 현재 WAL에 기록되지 않으므로, 기록되지 않은 변경 사항이 있는 상태에서 데이터베이스가 충돌하면 REINDEX로 해시 인덱스를 다시 빌드해야 할 수 있습니다.
PostgreSQL은 일반적인 B-tree 인덱스 외에 해시 인덱스도 지원합니다. 그러나 해시 인덱스는 어떠한 경우에도 사용을 피해야 합니다. 해시 인덱스가 때때로 더 나은 성능을 제공할 수 있지만, 재해싱 비용이 매우 클 수 있습니다. 더 중요한 점은 적어도 PostgreSQL 10.0 까지는 해시 인덱스가 WAL에 기록되지 않으므로 어떤 복제본에도 복제되지 않는다는 것입니다. PostgreSQL 문서의 설명은 다음과 같습니다:
해시 인덱스 작업은 현재 WAL에 기록되지 않으므로, 기록되지 않은 변경 사항이 있는 상태에서 데이터베이스가 충돌하면 REINDEX로 해시 인덱스를 다시 빌드해야 할 수 있습니다. 또한 초기 기본 백업 이후에는 스트리밍 복제나 파일 기반 복제로 해시 인덱스의 변경 사항이 복제되지 않으므로, 이후 그 인덱스를 사용하는 쿼리에 잘못된 결과를 반환합니다. 이러한 이유로 현재 해시 인덱스 사용은 권장하지 않습니다.
RuboCop은 해시 인덱스 사용을 감지하면 위반(offense)을 등록하도록 구성되어 있습니다.
해시 인덱스 대신 일반적인 B-tree 인덱스를 사용해야 합니다.