
23/05/2009, 19:40
|
 | Moderador criollo | | Fecha de Ingreso: noviembre-2007 Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 2 meses Puntos: 2658 | |
Respuesta: limite de registros en una tabla en mysql En realidad hay un error en el concepto escrito por santa: Un campo de 10 caracteres, digamos CHAR(10), considerando solamente valores alfanuméricos de la A a la Z, y del 0 al 9, implicaría una combinatoria de 36^10 - 1, esto es: 3.656.158.440.062.975, ya que solamente estamos hablando de 26 letras y 10 números... con el uso de 10 bytes.
En lugar de eso, si usas un BIGINT en realidad usas 8 bytes, ya que los números se almacenan en binario, no como caracteres. Esto significa que para un BIGINT la representación es: 18.446.744.073.709.551.615 . Este valor represente 9.000 veces más valores que con 10 caracteres.
Espero que se entienda la idea: Ante cualquier circunstancia es mejor y ocupa menos espacio, el almacenamiento de un número que el de un caracter, no por las representaciones posibles de un caracter, sino por la forma en que se almacenan los mismos: Un caracter es un Byte, sin importar cuál es. Un número puede ser uno, dos, tres o cuatro bytes, pero en el menor de los casos, su representación es de 255 valores, por cada uno.
El problema de la definición de la clave primaria no tiene relación solamente con que sea numérico, o de caracteres. Tiene que ver con el concepto básico: Una clave primaria es un campo o conjunto de campos que identifica univocamente un sólo registro en una tabla. Cuando no hay un campo o combinación de ellos que lo pueda hacer, entonces es forzoso poner uno numérico incremental o no. Sino, depende de lo que se considere mejor o más útil para el sistema.
Es posible, en contexto de un diseño, que incluso por cuestiones de eficiencia de consultas, sea mejor hacer una clave compleja (varios campos), que poner uno numérico, que no ayudará en la performance de las mismas.
Finalmente, lo que Casius dice es cierto: aún en el peor escenario es difícil que un BIGINT te quede corto. Por lo demás si te resulta insuficiente, es posible que el problema sea un defecto en el diseño del modelo de la base, antes que en la insuficiencia del tipo de campo.
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |