해시 인덱스

PostgreSQL는 일반 B-tree 인덱스 외에 해시 인덱스를 지원합니다.

하지만 해시 인덱스는 어떤 경우에도 피해야 합니다.

해시 인덱스는 가끔 더 나은 성능을 제공할 수 있지만, 재해싱의 비용이 매우 높을 수 있습니다.

더 중요한 것은: PostgreSQL 10.0까지 해시 인덱스는 WAL에 기록되지 않으므로 어떤 복제본에도 복제되지 않습니다. PostgreSQL 문서에서:

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

RuboCop는 해시 인덱스를 사용할 때 불법 행위를 등록하도록 구성되어 있습니다.

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