【问题标题】: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 的情况如何?

提前谢谢...

【问题讨论】:

  • 我可以假设数据库都在同一台服务器上吗?
  • 是的。而且我已经尝试过连接来自不同数据库的表。它有效。

标签: mysql database join cross-database


【解决方案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 个表。

【讨论】:

  • 你确定减速不是因为数据库大小?即使表在同一个数据库中,您也很可能会看到速度变慢。
猜你喜欢
  • 2011-06-21
  • 2018-02-06
  • 1970-01-01
  • 2014-10-05
  • 2014-02-26
  • 2013-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多