153 votos

Número máximo de registros en una tabla de base de datos MySQL

¿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!

203voto

Bill Karwin Puntos 204877

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.

53voto

KM. Puntos 51800

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

11voto

PHPGuru Puntos 93

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.

6voto

Xylo Puntos 34

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.

-2voto

9jamkt Puntos 27

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.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X