sql >> Database teknologi >  >> RDS >> Mysql

B-Tree vs Hash Tabel

Du kan kun få adgang til elementer med deres primære nøgle i en hashtabel. Dette er hurtigere end med en træalgoritme (O(1) i stedet for log(n) ), men du kan ikke vælge områder (alt mellem x og y ).Træalgoritmer understøtter dette i Log(n) hvorimod hash-indekser kan resultere i en fuld tabelscanning O(n) . Også den konstante overhead af hash-indekser er normalt større (hvilket ikke er nogen faktor i theta-notation, men det eksisterer stadig ).Også er træalgoritmer normalt nemmere at vedligeholde, vokse med data, skalere osv.

Hash-indekser fungerer med foruddefinerede hash-størrelser, så du ender med nogle "buckets", hvor objekterne er gemt i. Disse objekter løkkes igen for virkelig at finde den rigtige inde i denne partition.

Så hvis du har små størrelser, har du meget overhead til små elementer, store størrelser resulterer i yderligere scanning.

Dagens hash-tabeller algoritmer skalerer normalt, men skalering kan være ineffektiv.

Der kan dog være et punkt, hvor dit indeks overstiger en tolerabel størrelse sammenlignet med dine hashstørrelser, og hele dit indeks skal genopbygges. Normalt er dette ikke et problem, men for kæmpestore-store databaser kan dette tage dage.

Afvejningen for træalgoritmer er lille, og de er velegnede til næsten alle anvendelsestilfælde og er derfor standard.

Men hvis du har en meget præcis use case, og du ved præcis, hvad og kun hvad der skal til, kan du drage fordel af hashing-indekser.



  1. mysql-processen kan ikke stoppes

  2. mysql match mod flere ord

  3. AFTER LOGON(Oracle) trigger i PostgreSQL med udvidelse – login_hook

  4. Kan du deltage i en underforespørgsel med Doctrine 2 DQL?