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

penalizzazione delle prestazioni delle stringhe come chiavi primarie?

Il DB deve mantenere un B-Tree (o una struttura simile) con la chiave in modo da averli ordinati.

Se la chiave viene sottoposta a hash e la memorizza nel B-Tree, andrebbe bene per verificarne rapidamente l'unicità della chiave -- la chiave può ancora essere cercata in modo efficiente. Ma non saresti in grado di effettuare una ricerca efficiente per intervallo di dati (es. con LIKE ) perché il B-Tree non è più ordinato in base al valore String.

Quindi penso che la maggior parte dei DB memorizzi davvero la stringa nell'albero B, che può (1) occupare più spazio rispetto ai valori numerici e (2) richiedono che il B-Tree sia ribilanciato se le chiavi sono inserite in ordine arbitrario (nessuna nozione di valore crescente come con pk numerico).

La penalità in pratica può variare da insignificante a enorme. Tutto dipende dall'utilizzo, dal numero di righe, dalla dimensione media della chiave stringa, dalle query che uniscono la tabella, ecc.