单个 Mysql 数据库实例中拥有太多表(例如 200 个)会降低其性能吗?
答案1
一般来说,任何东西越多,性能就越低。不过,200 似乎是一个相当小的数字。2,000 可能会真正影响性能,20,000 绝对会。不过,一般来说,您应该将表的数量保持在较小水平,因为 MySQL 可以处理表中的大量行。
答案2
一般来说,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
希望能帮助到你
答案3
表的数量并不重要,重要的是:
- 您正在运行哪些查询 - 您不太可能在单个查询中查询所有 200 个查询
- 任何给定时间点的系统上的总查询负载
拥有多余的表确实意味着可以重新获得并用于其他用途的内存和硬盘空间。请记住,对表进行非规范化会增加出现坏数据的风险,因为您正在摆脱引用完整性。
答案4
可以吗?当然可以。但具体多少取决于您的应用程序及其访问模式,以及您使用的是 myisam 还是 innodb,以及 innodb 是否处于文件每表模式,以及 innodb 日志的大小。您需要向我们提供更多详细信息。