Para todas as versões do Postgres que suportam a indexação de hash , há um aviso ou nota de que os índices de hash são "semelhantes ou mais lentos" ou "não melhores" que os índices btree , pelo menos até a versão 8.3. Dos documentos:
Nota: Devido à utilidade limitada dos índices de hash, um índice da árvore B geralmente deve ser preferido sobre um índice de hash. Não temos evidências suficientes de que os índices de hash sejam realmente mais rápidos que as árvores B, mesmo para comparações =. Além disso, os índices de hash exigem bloqueios mais grossos; consulte a Seção 9.7.
Nota: O teste mostrou que os índices de hash do PostgreSQL são semelhantes ou mais lentos que os índices da árvore B, e o tamanho do índice e o tempo de construção dos índices de hash são muito piores. Os índices de hash também sofrem desempenho ruim com alta simultaneidade. Por esses motivos, o uso do índice de hash é desencorajado.
Nota: O teste mostrou que os índices de hash do PostgreSQL não apresentam desempenho melhor que os índices da árvore B, e o tamanho do índice e o tempo de construção para os índices de hash são muito piores. Além disso, atualmente, as operações de índice de hash não são registradas no WAL, portanto, os índices de hash podem precisar ser reconstruídos com o REINDEX após uma falha no banco de dados. Por esses motivos, o uso do índice de hash é atualmente desencorajado.
Nesse segmento da versão 8.0 , eles afirmam que nunca encontraram um caso em que os índices de hash fossem realmente mais rápidos que o btree.
Mesmo na versão 9.2, o ganho de desempenho para qualquer coisa que não fosse escrever o índice real era quase nada, de acordo com esta postagem do blog (14 de março de 2016):
Hash Indexes on Postgres, de André Barbosa.
Minha pergunta é como isso é possível?
Por definição, os índices Hash são uma O(1)
operação, onde uma btree é uma O(log n)
operação. Então, como é possível que uma O(1)
pesquisa seja mais lenta do que (ou até semelhante a) encontrar a ramificação correta e depois encontrar o registro correto?
Eu quero saber o que a teoria da indexação NUNCA poderia tornar isso uma possibilidade!