Sie können nur über ihren Primärschlüssel in einer Hashtabelle auf Elemente zugreifen. Dies ist schneller als mit einem Baumalgorithmus ( O(1)
anstelle vonlog(n)
), aber Sie können keine Bereiche auswählen ( alles dazwischen x
undy
). Baumalgorithmen unterstützen dies, Log(n)
während Hash-Indizes zu einem vollständigen Tabellenscan führen können O(n)
. Auch der konstante Overhead von Hash-Indizes ist normalerweise größer ( was in der Theta-Notation kein Faktor ist, aber immer noch existiert ). Außerdem sind Baumalgorithmen normalerweise einfacher zu warten, wachsen mit Daten, Skalierung usw.
Hash-Indizes arbeiten mit vordefinierten Hash-Größen, sodass Sie am Ende einige "Buckets" haben, in denen die Objekte gespeichert sind. Diese Objekte werden erneut durchlaufen, um wirklich das richtige in dieser Partition zu finden.
Wenn Sie also kleine Größen haben, haben Sie viel Aufwand für kleine Elemente, große Größen führen zu weiterem Scannen.
Heutige Algorithmen für Hash-Tabellen skalieren normalerweise, aber die Skalierung kann ineffizient sein.
Es gibt tatsächlich skalierbare Hashing-Algorithmen. Fragen Sie mich nicht, wie das funktioniert - es ist mir auch ein Rätsel. AFAIK entwickelten sie aus einer skalierbaren Replikation, bei der ein erneutes Hashing nicht einfach ist.
Seine genannt RUSH - R eplication U nder S calable H Veraschungs, und diese Algorithmen sind somit RUSH Algorithmen bezeichnet.
Es kann jedoch vorkommen, dass Ihr Index im Vergleich zu Ihren Hash-Größen eine tolerierbare Größe überschreitet und Ihr gesamter Index neu erstellt werden muss. Normalerweise ist dies kein Problem, aber bei riesigen Datenbanken kann dies Tage dauern.
Der Kompromiss für Baumalgorithmen ist gering und sie eignen sich für fast jeden Anwendungsfall und sind daher Standard.
Wenn Sie jedoch einen sehr genauen Anwendungsfall haben und genau wissen, was und nur was benötigt wird, können Sie Hashing-Indizes nutzen.