sql >> Base de Datos >  >> RDS >> Mysql

penalización de rendimiento de las cadenas como claves principales?

La base de datos necesita mantener un B-Tree (o una estructura similar) con la llave de manera de tenerlos ordenados.

Si la clave se codifica y se almacena en el B-Tree, estaría bien verificar rápidamente la exclusividad de la clave:la clave todavía se puede buscar de manera eficiente. Pero no podría buscar eficientemente rango de datos (por ejemplo, con LIKE ) porque el B-Tree ya no está ordenado según el valor de String.

Así que creo que la mayoría de las bases de datos realmente almacenan la cadena en el árbol B, lo que puede (1) ocupar más espacio que los valores numéricos y (2) requieren que el B-Tree sea reequilibrado si las claves se insertan en orden arbitrario (sin noción de valor creciente como con pk numérico).

La pena en la práctica puede variar de insignificante a enorme. Todo depende del uso, el número de filas, el tamaño promedio de la clave de cadena, las consultas que unen la tabla, etc.