sql >> Databasteknik >  >> RDS >> Mysql

prestationsstraff för strängar som primärnycklar?

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.



  1. JDBC batch insert prestanda

  2. Python MySQLdb / MySQL INSERT IGNORE &Kontrollera om ignoreras

  3. Hur använder man OdbcParameter för MySQL?

  4. Byt från SQLite till PostgreSQL i ett nytt Rails-projekt