¿Cuál es el límite superior de registros para una tabla de base de datos MySQL? Me pregunto acerca del campo de autoincremento. ¿Qué sucedería si agregara millones de registros? ¿Cómo manejar este tipo de situaciones? ¡Gracias!
Respuestas
¿Demasiados anuncios?El mayor valor de un número entero tiene poco que ver con el número máximo de filas que puedes almacenar en una tabla.
Es verdad que si usas un int o bigint como tu clave primaria, solo puedes tener tantas filas como el número de valores únicos en el tipo de datos de tu clave primaria, pero no tienes que hacer que tu clave primaria sea un entero, podrías hacer que sea un CHAR(100). También podrías declarar la clave primaria sobre más de una columna.
Existen otras restricciones en el tamaño de la tabla además del número de filas. Por ejemplo, podrías usar un sistema operativo que tiene una limitación en el tamaño de archivo. O podrías tener un disco duro de 300GB que solo puede almacenar 300 millones de filas si cada fila tiene un tamaño de 1KB.
Los límites del tamaño de la base de datos son realmente altos:
http://dev.mysql.com/doc/refman/5.1/en/source-configuration-options.html
El motor de almacenamiento MyISAM soporta 232 filas por tabla, pero puedes construir MySQL con la opción --with-big-tables
para hacer que soporte hasta 264 filas por tabla.
http://dev.mysql.com/doc/refman/5.1/en/innodb-restrictions.html
El motor de almacenamiento InnoDB tiene un ID de fila interno de 6 bytes por tabla, por lo que hay un número máximo de filas igual a 248 o 281,474,976,710,656.
Un espacio de tablas InnoDB también tiene un límite en el tamaño de la tabla de 64 terabytes. Cuántas filas caben en esto depende del tamaño de cada fila.
El límite de 64TB asume el tamaño de página predeterminado de 16KB. Puedes aumentar el tamaño de página, y por lo tanto aumentar el espacio de tablas hasta 256TB. Pero creo que encontrarías otros factores de rendimiento que harían esto inadecuado mucho antes de que hagas crecer una tabla a ese tamaño.
Los tipos de datos int de mysql pueden manejar bastantes filas: http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html
El valor más grande de int
sin signo es 4,294,967,295
El valor más grande de bigint
sin signo es 18,446,744,073,709,551,615
Te sugiero que nunca borres datos. No decidas si la tabla es más larga que 1000 truncar el final de la tabla. Debe haber una lógica de negocio real en tu plan, como por ejemplo, ¿hace cuánto tiempo está inactivo este usuario? Por ejemplo, si lleva más de 1 año inactivo, entonces muévelo a una tabla diferente. Esto debería ocurrir semanal o mensualmente en un script de mantenimiento en medio de un momento lento.
Cuando te encuentres con demasiadas filas en tu tabla, entonces deberías empezar a particionar las tablas o dividirlas y poner los datos antiguos en tablas antiguas por año, como por ejemplo: usuarios_2011_ene, usuarios_2011_feb o usando números para el mes. Luego cambia tu programación para trabajar con este modelo. Tal vez hacer una tabla nueva con menos información para resumir los datos en menos columnas y luego solo hacer referencia a las tablas de partición más grandes cuando necesites más información, como cuando el usuario esté viendo su perfil. Todo esto debería ser considerado muy cuidadosamente para que en el futuro no sea demasiado costoso refactorizar. También podrías colocar solo a los usuarios que visitan tu sitio regularmente en una tabla y a los usuarios que nunca vienen en un conjunto de tablas archivadas.
En InnoDB, con un límite en el tamaño de la tabla de 64 terabytes y un límite de tamaño de fila de MySQL de 65,535 puede haber 1,073,741,824 filas. Esa sería la cantidad mínima de registros utilizando el límite máximo de tamaño de fila. Sin embargo, se pueden agregar más registros si el tamaño de la fila es más pequeño.
No hay límite. Solo depende de tu memoria libre y el tamaño máximo de archivo del sistema. Pero eso no significa que no debas tomar medidas de precaución para manejar el uso de la memoria en tu base de datos. Siempre crea un script que pueda eliminar filas que no se utilizan o que mantendrá el número total de filas dentro de una cifra particular, digamos mil.