sql >> Database >  >> RDS >> Mysql

B-Tree versus hash-tabel

Je hebt alleen toegang tot elementen met hun primaire sleutel in een hashtabel. Dit is sneller dan met een boomalgoritme (O(1) in plaats van log(n) ), maar u kunt geen bereiken selecteren (alles tussen x en y ).Tree-algoritmen ondersteunen dit in Log(n) terwijl hash-indexen kunnen resulteren in een volledige tabelscan O(n) .Ook de constante overhead van hash-indexen is meestal groter (wat geen factor is in theta-notatie, maar het bestaat nog steeds ).Ook zijn boomalgoritmen meestal gemakkelijker te onderhouden, mee te groeien met gegevens, schaal, enz.

Hash-indexen werken met vooraf gedefinieerde hash-groottes, dus je krijgt een aantal "buckets" waarin de objecten worden opgeslagen. Deze objecten worden opnieuw doorlopen om echt de juiste binnen deze partitie te vinden.

Dus als je kleine formaten hebt, heb je veel overhead voor kleine elementen, grote formaten resulteren in verder scannen.

De huidige algoritmen voor hashtabellen schalen meestal, maar schalen kan inefficiënt zijn.

Er kan echter een punt zijn waarop uw index een toelaatbare grootte overschrijdt in vergelijking met uw hash-groottes en uw hele index opnieuw moet worden opgebouwd. Meestal is dit geen probleem, maar voor enorm-enorm-enorme databases kan dit dagen duren.

De afweging voor boomalgoritmen is klein en ze zijn geschikt voor bijna elke gebruikssituatie en zijn dus standaard.

Als u echter een zeer nauwkeurige use-case heeft en u precies weet wat en alleen wat nodig is, kunt u profiteren van hashing-indexen.



  1. Foutcode 1111. Ongeldig gebruik van groepsfunctie

  2. Trek een maand af van een datum in MariaDB

  3. Haal het juiste deel van een string in SQL Server (T-SQL)

  4. Hoe gebruik ik lentegegevens jpa om de jsonb-kolom op te vragen?