2010-01-26 16 views
12

¿Cuál es la cantidad máxima de tablas que MySQL puede manejar?Número máximo de tablas en MySQL

+0

Para documentos, consulte [Límites en el número de bases de datos y tablas] (https://dev.mysql.com/doc/refman/5.5/en/database-count- limit.html) y similares. P.ej. 'InnoDB' permite hasta 4 mil millones de tablas (y debo admitir que si eso es US-Billones o no, no puedo decir). Para un comentario profesional: [Bill Karwin en "¿Hay un número máximo de tablas que una base de datos MySQL puede tener?"] (Https://www.quora.com/Es-aquí-un-número- máximo-de-tables- a-MySQL-database-can-have) – hakre

Respuesta

24

El hecho de que haga esta pregunta es probablemente un indicador de que no está adoptando un enfoque de mejores prácticas para su problema.

Es posible que desee explicar por qué necesita crear muchas tablas, para ver si recibirá mejores sugerencias sobre cómo abordar este problema.

Sin embargo, no hay límites de servidor en el número de tablas en una base de datos MySQL, pero dado que cada tabla MyISAM tiene archivos asociados, cualquier límite del sistema operativo en la cantidad de archivos permitidos tendrá un efecto. Las tablas, índices, etc. de InnoDB se almacenan en un solo espacio de tabla, con un máximo de dos mil millones de tablas. (Source)

+2

¿Qué es MyISAM? – John

+4

MyISAM es el motor de almacenamiento predeterminado para MySQL. Es probable que sus tablas utilicen MyISAM a menos que indique explícitamente el uso de InnoDB. Cada tabla MyISAM se almacena en el disco en tres archivos. Los archivos tienen nombres que comienzan con el nombre de la tabla y tienen una extensión para indicar el tipo de archivo. Un archivo .frm almacena el formato de tabla. El archivo de datos tiene una extensión .MYD. El archivo de índice tiene una extensión .MYI. Más información: http://dev.mysql.com/doc/refman/5.0/en/myisam-storage-engine.html, http://en.wikipedia.org/wiki/MyISAM. –

+2

+1 por responder la pregunta aún después de señalar que probablemente no sea una buena idea. –

2

Contrariamente a la respuesta de Daniel Vassallo, tengo un caso de uso en el que se necesita una gran cantidad de tablas. Podría estar equivocado, pero no creo que haya ninguna "mejor práctica" por la cual pueda reducir el número de tablas.

Aunque probablemente sea correcto que el número de tablas solo esté limitado por el SO, solo quiero agregar que estoy usando más de 1000 tablas en una base de datos con un rendimiento bastante bueno. El único inconveniente parece ser una sobrecarga aumentada para los archivos .frm. En mi caso, he dividido una mesa muy grande en más de 1000 mesas separadas con la misma estructura de tabla. La partición de MySQL no era una opción para mí debido a la desnormalización, que requiere 2 copias de cada registro en tablas separadas.

+0

* "He dividido una mesa muy grande en más de 1000 mesas separadas" *: ¿por qué tienes que hacer eso? – TMS

+0

Para mejorar el rendimiento (tiempos de consulta más rápidos). Como ya expliqué, la partición no era una opción porque no me permite colocar dos copias de cada registro en diferentes particiones (al menos no de ninguna manera). – robguinness

+0

Desde el punto de vista de la normalización de datos, muchas tablas podrían ser una mala práctica (depende de las tablas). Solo digo que cada teoría debe ser probada en la práctica y viceversa. Así que dudo de la postura tomada en su comentario (en la respuesta), pero +1 por compartir lo que hizo. – hakre

4

También tengo un caso de uso donde se necesita una gran cantidad de tablas. Por el momento, una de nuestras bases de datos tiene cerca de 100.000 tablas con un rendimiento excelente.

Como mencionó Rob Guinness, hay una sobrecarga significativa para los archivos .frm. También es importante tener en cuenta que cualquier consulta en information_schema sin limitaciones en el esquema y si es posible la tabla en sí dará como resultado un golpe de rendimiento serio mientras se ejecuta la consulta.

+0

¿Cada una de estas tablas tiene una estructura diferente? – TMS

0

El hecho de que haga esta pregunta es probablemente un indicador de que no está adoptando un enfoque de mejores prácticas para su problema.

Una posible situación en la que pueda necesitar una gran cantidad de tablas es cuando está desarrollando aplicaciones multi-arrendatario, donde por cada inquilino se crea conjunto separado de tablas (digamos con tentantId como un prefijo del nombre de la tabla). Consulte este artículo (parte Aislamiento de datos): http://www.javacodegeeks.com/2013/11/architecting-a-multi-tenant-application.html