PostgreSQL HASH index

Czy ktoś zna sytuację, w której powinien być użyty Hash PostgreSQL zamiast drzewa B, bo wydaje mi się, że to pułapka. Są one dużo więcej czasu, aby utworzyć lub utrzymać niż B-TREE( co najmniej 10 razy więcej), zajmują również więcej miejsca (dla jednego z moich tabeli.kolumny, B-TREE zajmuje 240 MB, a HASH zajmuje 4 GB) i chyba zrozumiałem z Googla, że nie wybierają szybciej niż B-TREEs; jednak HASH może być Ostatnio zoptymalizowany lub google się mylił.

W każdym razie, chciałem Twoje opinie i doświadczenia. Jeśli te Hasze są złe, ludzie powinni wiedzieć.

Thanks
A co z Hashami MySQL?

Author: Madara's Ghost, 2008-12-29

4 answers

Skróty są szybsze niż B-Trees w przypadkach, gdy masz znaną wartość klucza, szczególnie znaną wartość unikalną.

Hasze powinny być używane, jeśli dana kolumna nie jest nigdy przeznaczona do skanowania w stosunku do komend < LUB >.

Hashes are O(1) complexity, B-Trees are O(log n) complexity ( iirc ) , ergo, w przypadku dużych tabel z unikalnymi wpisami, pobierających ITEM="foo", będą one najbardziej efektywnym sposobem wyszukiwania.

To jest szczególnie praktyczne, gdy te unikalne pola są używane na warunku łączenia.

 34
Author: Kent Fredric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-03 15:36:46

Lepiej jest użyć indeksu Hash dla kolumn tekstowych, które są wyszukiwane tylko za pomocą = operator. Na przykład kolumna URL, która musi być indeksowana dla wyszukiwania.

Indeks Hash jest około 30% wielkości indeksu drzewa B dla czegoś takiego jak adres URL.

Zmniejszony rozmiar pozwala Postgresqlowi efektywniej korzystać z jego pamięci podręcznej (aka, shared_buffers).

 6
Author: Clive Paterson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-22 08:11:25

Jako http://www.postgresql.org/docs/9.2/static/sql-createindex.html point Hash index nadal nie są bezpieczne, co oznacza, że nie są w 100% niezawodne w przypadku awarii (indeks musi zostać zrekonstruowany, a w przypadku replikacji może dojść do błędnej odpowiedzi). Sprawdź również http://www.postgresql.org/docs/9.1/static/wal-intro.html

 5
Author: Diego Andrés Díaz Espinoza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-27 15:31:56

Nie próbowałem tego, ale rozważam takie podejście, aby użyć indeksów hashowych na niezalogowanych tabelach temp.

Rozumiem, że budują szybciej, zajmują mniej miejsca i pytają nieco szybciej niż B-tree.

Zgodnie z Ten benchmark, indeksy hash są nieco szybsze i nieco mniejsze niż indeksy BTree. Nie można jednak utworzyć z nich unikalnego indeksu hashowego-dodatkowo nie są one rejestrowane przez WAL.

 2
Author: L. Rodgers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-31 17:28:58