Para cada versión de Postgres que admite la indexación hash , hay una advertencia o nota de que los índices hash son "similares o más lentos" o "no mejores" que los índices btree , al menos hasta la versión 8.3. De los documentos:
Nota: Debido a la utilidad limitada de los índices hash, generalmente se debe preferir un índice de árbol B sobre un índice hash. No tenemos evidencia suficiente de que los índices hash sean realmente más rápidos que los árboles B, incluso para las comparaciones =. Además, los índices hash requieren bloqueos más gruesos; ver la Sección 9.7.
Nota: Las pruebas han demostrado que los índices de hash de PostgreSQL son similares o más lentos que los índices de árbol B, y el tamaño del índice y el tiempo de creación de los índices de hash es mucho peor. Los índices de hash también sufren un bajo rendimiento con alta concurrencia. Por estas razones, se desaconseja el uso del índice hash.
Nota: Las pruebas han demostrado que los índices hash de PostgreSQL no funcionan mejor que los índices B-tree, y el tamaño del índice y el tiempo de construcción de los índices hash es mucho peor. Además, las operaciones de índice hash no están actualmente registradas en WAL, por lo que es posible que sea necesario reconstruir los índices hash con REINDEX después de un bloqueo de la base de datos. Por estas razones, actualmente no se recomienda el uso del índice hash.
En este hilo de la versión 8.0 , afirman que nunca había encontrado un caso en el que los índices hash fueran realmente más rápidos que btree.
Incluso en la versión 9.2, la ganancia de rendimiento para cualquier otra cosa que no sea escribir el índice real no fue casi nada según esta publicación de blog (14 de marzo de 2016):
Hash Indexes on Postgres de André Barbosa.
Mi pregunta es ¿cómo es eso posible?
Por definición, los índices Hash son una O(1)
operación, donde un btree es una O(log n)
operación. Entonces, ¿cómo es posible que una O(1)
búsqueda sea más lenta que (o incluso similar a) encontrar la rama correcta y luego encontrar el registro correcto?
¡Quiero saber qué pasa con la teoría de la indexación!