Mysql
 sql >> Datenbank >  >> RDS >> Mysql

B-Baum vs. Hash-Tabelle

Sie können auf Elemente nur über ihren Primärschlüssel in einer Hashtabelle zugreifen. Dies ist schneller als mit einem Baumalgorithmus (O(1) statt log(n) ), aber Sie können keine Bereiche auswählen (alles zwischen x und y ).Tree-Algorithmen unterstützen dies in Log(n) wohingegen 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, skalieren usw.

Hash-Indizes arbeiten mit vordefinierten Hash-Größen, sodass Sie am Ende einige "Eimer" haben, in denen die Objekte gespeichert sind. Diese Objekte werden erneut durchlaufen, um wirklich das richtige innerhalb dieser Partition zu finden.

Wenn Sie also kleine Größen haben, haben Sie viel Overhead für kleine Elemente, große Größen führen zu weiterem Scannen.

Heutige Hash-Tabellen-Algorithmen skalieren normalerweise, aber Skalierung kann ineffizient sein.

Es kann jedoch einen Punkt geben, an dem 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 sehr großen 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.