sql >> Databasteknik >  >> RDS >> Mysql

B-Tree vs Hash Tabell

Du kan bara komma åt element med deras primärnyckel i en hashtabell. Detta är snabbare än med en trädalgoritm (O(1) istället för log(n) ), men du kan inte välja intervall (allt mellan x och y ).Trädalgoritmer stöder detta i Log(n) medan hashindex kan resultera i en fullständig tabellsökning O(n) .Också den konstanta omkostnaden för hashindex är vanligtvis större (vilket inte är någon faktor i theta-notationen, men det finns fortfarande ).Också trädalgoritmer är vanligtvis lättare att underhålla, växa med data, skala, etc.

Hashindex fungerar med fördefinierade hashstorlekar, så du får några "buckets" där objekten lagras i. Dessa objekt loopas om igen för att verkligen hitta rätt inuti den här partitionen.

Så om du har små storlekar har du mycket omkostnader för små element, stora storlekar resulterar i ytterligare skanning.

Dagens hashtabellalgoritmer skalar vanligtvis, men skalning kan vara ineffektivt.

Det kan dock finnas en punkt där ditt index överstiger en tolerabel storlek jämfört med dina hashstorlekar och hela ditt index måste byggas om. Vanligtvis är detta inte ett problem, men för enorma-stora-stora databaser kan detta ta dagar.

Avvägningen för trädalgoritmer är liten och de är lämpliga för nästan alla användningsfall och är därför standard.

Men om du har ett mycket exakt användningsfall och du vet exakt vad och bara vad som kommer att behövas, kan du dra fördel av hashindex.



  1. Sammansatt primärnyckel i django

  2. alternativ till mysql_field_name i mysqli

  3. Varför lägger inte "insert"-funktionen till rader med MySQLdb?

  4. Tio vanliga hot mot genomförandeplanens kvalitet