해시 인덱스

PostgreSQL은 일반 B-트리 인덱스 외에도 해시 인덱스를 지원합니다. 그러나 해시 인덱스는 가능한 한 피해야 합니다. 때로는 성능이 더 좋을 수 있지만 해싱 비용이 매우 높을 수 있습니다. 더 중요한 것은 최소한 PostgreSQL 10.0 이전에는 해시 인덱스가 WAL(Write-Ahead Logging)에 로깅되지 않으므로 복제본으로 복제되지 않는다는 점입니다. PostgreSQL 문서에는 다음과 같이 언급됩니다:

해시 인덱스 작업은 현재 WAL에 기록되지 않으므로 데이터베이스 충돌 후 해시 인덱스를 REINDEX로 다시 작성해야 할 수 있습니다. 또한, 해시 인덱스의 변경 사항은 초기 기본 백업 이후에는 스트리밍이나 파일 기반 복제를 통해 복제되지 않으므로, 해당 인덱스를 이후에 사용하는 쿼리에 잘못된 결과를 제공할 수 있습니다. 이러한 이유로, 현재 해시 인덱스 사용이 권장되지 않습니다.

RuboCop은 해시 인덱스 사용을 감지할 때 위반을 등록하도록 구성되어 있습니다.

해시 인덱스 대신 일반 B-트리 인덱스를 사용해야 합니다.