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

use*_*704 10 mysql performance

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

Top*_*gio 8

一般来说,你拥有的东西越多,性能就会降低。然而,200 似乎是一个相当小的数字。2,000 可能是真正的性能打击,绝对是 20,000。但是,一般而言,您应该保持表的数量较少,因为 MySQL 可以处理表中非常多的行。

  • 如果您的应用程序使用“information_schema”,那么大量的表会产生巨大的差异。'information_schema' 中的任何内容都不会被缓存。几个不同的 ORM 系统大量使用了这一点。 (8认同)
  • 见 http://bugs.mysql.com/bug.php?id=19588 (2认同)

小智 5

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

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

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/en/table-cache.html

希望能帮助到你