连接来自不同数据库的表的性能影响
Posted
技术标签:
【中文标题】连接来自不同数据库的表的性能影响【英文标题】:performance effect of joining tables from different databases 【发布时间】:2011-03-16 15:06:51 【问题描述】:我有一个使用名为“site1”的数据库的网站。我计划在同一台服务器上放置另一个站点,该服务器也将使用“site1”中的一些表。
所以我应该使用三个不同的数据库,例如“site1”(用于第一个站点特定数据)、“site2”(用于第二个站点特定数据)和“general”(用于公共表)。其中数据库general与site1和site2之间会有join语句。还是应该将所有表放在一个数据库中?
最佳做法是什么? 每种情况下的表现有何不同? 我正在使用 mysql。那么尤其是 MySQL 的情况如何?
提前谢谢...
【问题讨论】:
我可以假设数据库都在同一台服务器上吗? 是的。而且我已经尝试过连接来自不同数据库的表。它有效。 【参考方案1】:从性能的角度来看,不会有任何差异。只需保持索引到位,您就不会注意到您使用的是单个 DB 还是多个 DB。
除了性能之外,我能想到的还有 2 个小含义: 1.你不能有跨数据库的外键。 2. DB中的表根据使用情况或应用进行分区,可以帮助您轻松管理权限。
【讨论】:
我的回答假设所有数据库都在同一个数据库服务器上。如果您将它们放在不同的数据库服务器上,您将开始看到性能下降。 如果它们在同一台服务器上,您可以在 MySQL 中跨 DB 使用外键。但不知道如果它们在不同的服务器或其他 DBMS 上会发生什么。【参考方案2】:我可以从最近的个人经历中说出来。我在一些 php 代码中有一些旧的 mysql 查询,它们在相对较小的数据库中运行良好,但随着它的增长,查询变得越来越慢。
我有 freeradius 在自己的数据库中运行 mysql 以及我编写的另一个管理 php 应用程序。 freeradius 表大于 150 万行。我试图将我的应用程序数据库中的表连接到 freeradius 数据库。我可以肯定地说 150 万行太多了。运行一些查询完全锁定了我的应用程序。我最终不得不重新编写我的 php 应用程序的一部分来做不同的事情(即不加入来自不同数据库的 2 个表)。我还在一些关键字段上索引了半径记帐表并优化了一些查询(mysql EXPLAIN 语句可以很好地帮助解决这个问题)。现在速度快了很多。
除非真的有必要,否则我以后肯定会犹豫加入来自不同数据库的 2 个表。
【讨论】:
你确定减速不是因为数据库大小?即使表在同一个数据库中,您也很可能会看到速度变慢。以上是关于连接来自不同数据库的表的性能影响的主要内容,如果未能解决你的问题,请参考以下文章