해시 인덱스

PostgreSQL은 일반적인 B-tree 인덱스 외에도 해시 인덱스를 지원합니다. 그러나 해시 인덱스는 가능한 한 피해야 합니다. 때로는 더 나은 성능을 제공할 수 있지만 rehashing 비용이 매우 높을 수 있습니다. 더 중요한 것은 적어도 PostgreSQL 10.0까지 해시 인덱스가 WAL(Write-Ahead Logging)로 기록되지 않아 재구성해야 할 수도 있다는 것입니다. PostgreSQL 문서에서는 다음과 같이 설명하고 있습니다.

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

RuboCop은 해시 인덱스 사용을 감지하면 offense를 등록하도록 구성되어 있습니다.

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