DB måste ha ett B-träd (eller en liknande struktur) med nyckeln på ett sätt att få dem beställda.
Om nyckeln hashas och lagras i B-trädet skulle det vara bra att snabbt kontrollera unikheten av nyckeln -- nyckeln kan fortfarande slås upp effektivt. Men du skulle inte kunna söka effektivt efter intervall av data (t.ex. med LIKE
) eftersom B-trädet inte längre är ordnat enligt String-värdet.
Så jag tror att de flesta DB verkligen lagrar strängen i B-trädet, vilket kan (1) ta mer utrymme än numeriska värden och (2) kräver att B-trädet ombalanseras om nycklar infogas i godtycklig ordning (ingen föreställning om ökande värde som med numerisk pk).
straffet i praktiken kan variera från obetydlig till enorm. Allt beror på användningen, antalet rader, den genomsnittliga storleken på strängnyckeln, frågorna som sammanfogar tabellen, etc.