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

præstationsstraf af strenge som primære nøgler?

DB skal vedligeholde et B-Tree (eller en lignende struktur) med nøglen på en måde at få dem bestilt.

Hvis nøglen er hashed og gemt i B-Tree, ville det være fint at tjekke unikheden hurtigt af nøglen -- nøglen kan stadig slås op effektivt. Men du ville ikke være i stand til at søge effektivt efter område af data (f.eks. med LIKE ), fordi B-træet ikke længere er ordnet i henhold til strengværdien.

Så jeg tror, ​​at de fleste DB virkelig gemmer strengen i B-træet, som kan (1) tage mere plads end numeriske værdier og (2) kræver, at B-træet genafbalanceres hvis nøgler er indsat i vilkårlig rækkefølge (ingen forestilling om stigende værdi som med numerisk pk).

straffen i praksis kan variere fra ubetydelig til enorm. Det hele afhænger af brugen, antallet af rækker, den gennemsnitlige størrelse af strengnøglen, de forespørgsler, der forbinder tabellen osv.



  1. MariaDB JSON_QUERY() Forklaret

  2. Sådan gulvnumre i SQL

  3. hvordan sorteres rækkefølgen af ​​LEFT JOIN i SQL-forespørgsel?

  4. Bruger Oracle kortslutningsevaluering?