Mysql数据库中的表太多会影响性能吗?


10

一个Mysql数据库实例中的表太多(例如200个)会降低其性能吗?

Answers:


8

通常,拥有的任何东西越多,性能就会下降。但是,200似乎是一个很小的数字。2,000可能是真正的性能影响,肯定是20,000。不过,一般而言,您应该使表的数量保持较小,因为MySQL可以处理表中的大量行。


7
如果您的应用程序使用“ information_schema”,则大量表可能会产生巨大的不同。'information_schema'中没有任何内容被缓存。几个不同的ORM系统大量使用了此功能。
Zoredache


4

表的数量无关紧要,因为:

  1. 您正在运行哪些查询-您不可能一次查询全部200个查询
  2. 在任何给定时间点系统上的总体查询负载

拥有过多的表确实意味着可以重新使用的内存和硬盘空间。请记住,对表进行非规范化会增加不良数据的风险,因为您将摆脱参照完整性。


4

通常,200个表应该不是问题,但这取决于许多因素。

与其他软件共享的专用MySQL服务器vs服务器,128Mb vs 128Gb RAM等,记录很少的小表与具有斑点和数百万行的表。

MySQL具有可能的设置和多个引擎,它们分别以不同的方式影响表的性能。

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

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

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

table_open_cache是​​可以一次打开的表的数量(默认为64)。这可能需要大于架构中的表数,因为它与查询数据库的连接数有关。100个连接联接3个表可能意味着您已缓存300个表以及任何临时表。通常,模式或连接越复杂,数量越大。

open-files-limit我倾向于将其设置为4x table_open_cache,它应该是慷慨的,而不是费力算出一个确切的值。

mysql用户的操作系统文件句柄限制也可能是个问题(在linux上,默认值通常可以是1024,ulimit -n以显示用户限制)这可能会导致表数量少于此数量时出现问题mysql要求。这至少应与open-files-limit相同。

与任何数据库一样,您可以调整数百个调整参数以针对特定架构优化数据库。MySQL比大多数情况更糟糕,因为如果您想要NDB集群引擎,则可以插入额外的引擎。

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

希望能帮助到你


2

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


1

它可以?当然。但是,这在很大程度上取决于您的应用程序及其访问模式,以及您使用的是myisam还是innodb,innodb是否处于每表文件模式,以及innodb日志的大小。您需要给我们提供更多细节。


1

否-我认为表的数量不会成为您系统中的性能瓶颈。毕竟,它们只是您文件系统上的文件。在数据库中拥有数百个表并没有什么不寻常的。

您的查询未正确优化的可能性更大。我建议打开log-slow-querieslog-queries-not-using-indexes。当您确定慢速查询时,请使用该explain选项查看这些查询的查询计划,以识别缺少索引的位置。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.