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?
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.
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).
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
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.
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