해시 인덱스

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

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

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

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