Per ogni versione di Postgres che supportava l' indicizzazione hash , c'è un avvertimento o una nota che gli indici hash sono "simili o più lenti" o "non migliori" degli indici btree , almeno fino alla versione 8.3. Dai documenti:
Nota: a causa della limitata utilità degli indici hash, un indice B-tree dovrebbe generalmente essere preferito a un indice hash. Non abbiamo prove sufficienti che gli indici di hash siano effettivamente più veloci degli alberi B anche per = confronti. Inoltre, gli indici hash richiedono blocchi più grossolani; vedere la sezione 9.7.
Versione 7.3 (e fino alla 8.2) :
Nota: i test hanno dimostrato che gli indici hash di PostgreSQL sono simili o più lenti degli indici B-tree, e la dimensione dell'indice e il tempo di costruzione degli indici hash sono molto peggiori. Anche gli indici hash subiscono scarse prestazioni in caso di concorrenza elevata. Per questi motivi, l'uso dell'indice hash è scoraggiato.
Nota: i test hanno dimostrato che gli indici hash di PostgreSQL non funzionano meglio degli indici B-tree e la dimensione dell'indice e il tempo di costruzione degli indici hash sono molto peggiori. Inoltre, le operazioni dell'indice hash non sono attualmente registrate da WAL, pertanto potrebbe essere necessario ricostruire gli indici hash con REINDEX dopo un arresto anomalo del database. Per questi motivi, l'utilizzo dell'indice hash è attualmente sconsigliato.
In questo thread della versione 8.0 , affermano di non aver mai trovato un caso in cui gli indici di hash fossero effettivamente più veloci di btree.
Anche nella versione 9.2, il guadagno in termini di prestazioni per qualcosa di diverso dalla scrittura dell'indice reale è stato quasi nulla secondo questo post del blog (14 marzo 2016):
Hash Indexes su Postgres di André Barbosa.
La mia domanda è: come è possibile?
Per definizione, gli indici hash sono O(1)
un'operazione, in cui un btree è O(log n)
un'operazione. Quindi, come è possibile che una O(1)
ricerca sia più lenta di (o addirittura simile a) trovare il ramo corretto e quindi trovare il record corretto?
Voglio sapere che dire della teoria dell'indicizzazione potrebbe MAI renderlo possibile!