在Mysql数据库中有太多的表可以影响性能?

在单个Mysql数据库实例中有太多的表(例如200)可以降低性能

一般来说,你拥有的东西越多,性能就越差。 然而,200似乎是一个相当小的数字。 2,000可能是一个真正的performance打击,肯定是2万。 一般来说,你应该保持你的表的数量很小,因为MySQL可以在表中处理大量的行。

表的数量并不重要:

  1. 你正在运行什么查询 – 你不可能在单个查询中查询所有200个查询
  2. 系统在任何给定时间点的总体查询负载

拥有多余的表格意味着内存和硬盘空间,可以重新获得和用于其他事情。 请记住,将表格非规格化会增加数据不良的风险,因为您正在摆脱引用的完整性。

它可以? 当然。 但是多less取决于您的应用程序及其访问模式,以及您是否使用myisam或innodb,以及innodb是否处于file-per-table模式,以及innodb日志的大小。 你需要给我们更多的细节。

不 – 我不认为表格的数量会成为系统中的性能瓶颈。 毕竟,它们只是文件系统上的文件。 数据库中有数百个表格没有什么特别之处。

更有可能的是你的查询没有适当的优化。 我build议打开log-slow-querieslog-queries-not-using-indexes 。 当您确定查询速度较慢时,请使用explain选项查看这些查询的查询计划,以确定索引丢失的位置。

有关更多详细信息,请参阅http://dev.mysql.com/doc/refman/5.0/en/slow-query-log.html

对于每个表的索引,MySQL都有自己的索引。 索引需要内存来保存和使用,并且索引有全局限制。 当有许多表索引不能全部在RAM中时,所以它们会进入磁盘,直接影响性能。 尝试在my.cnf提出这个: key_buffer_size=256M :这是用于保存索引信息的RAM的数量。

一般来说,200张表不应该成为一个问题,但这取决于很多事情。

专用的MySQL服务器VS服务器与其他软件共享,128Mb与128Gb RAM等,小表与几个纪录vs斑点与数百万行的logging。

MySQL有可能设置和多个引擎,每个引擎以不同的方式影响表的性能。

MyISAM通常每个表格有三个文件.frm,.MYD,.MYI

正常模式下的INNODB具有.frm,所有数据都存储在中央文件中

INNODB在每个表模式下的一个文件中有.frm,.idb

table_open_cache是​​一次可以打开的表的数量(默认64)。 这可能需要大于模式中的表的数量,因为它与查询数据库的连接数有关。 100个连接join3个表可能意味着你有300个表caching加上任何临时表。 一般来说,模式或连接越复杂,数字越大。

打开文件限制我倾向于将其设置为4x table_open_cache,这应该是慷慨的,而不是打算一个确切的价值。

MySQL用户的操作系统文件句柄限制也可能是一个问题(在Linux上,默认值通常可以是1024,ulimit -n显示用户限制),这可能会导致大量表的问题,当它less于数字MySQL要求。 这应该至less与打开文件限制相同。

与任何数据库一样,有数百个调整参数,您可以调整以优化特定模式的数据库。 MySQL比这个更糟,因为如果你想要NDB集群引擎,你可以插入额外的引擎。

http://dev.mysql.com/doc/refman/5.1/en/table-cache.html

希望能帮助到你