在我们的软件中,我们在各种安装中共享信息。
目前,我们在同一个数据库中使用登台表来促进这一点。我们使用存储过程将实时表中的某些数据提取到登台表中,然后转储它们。然后,此转储将加载到目标数据库的登台表中,并且存储过程将合并到数据中。
这很好用,但由于一些原因*,我正在考虑将其从暂存表转移到单独的暂存数据库。我只关心这是否会产生任何性能影响。
在几个不同配置的系统上非常快地尝试了这个(就像一个思考练习),我得出了不同的结果。一个(没有太多的数据,并运行MySQL 5.6)显示没有真正的差异,甚至可能稍快。另一个(有更多的数据,运行MySQL 5.5)显示它慢了大约1.5倍。
我很清楚可能会有可能影响这个的配置选项,我不是DBA,所以任何指针都会非常感激。
TL; DR 与同一数据库中的数据相比,将数据插入到不同数据库(在同一服务器上)的表中可能会产生什么性能影响。它取决于MySQL版本或配置设置吗?
*如果您对“原因”感兴趣,我可以在评论中通知您
答案 0 :(得分:0)
首先我要说你不能像你那样进行测试。
数据库和其中的MySQL依赖于硬件。有许多可用的MySQL变量可以将它从蜗牛变为公式1.
因此,您在不同的系统上进行了测试,每个系统都运行在不同的硬件上或包含不同的数据。从技术上讲,MySQL默认使用的是InnoDB存储引擎。默认情况下,InnoDB存储引擎将所有数据存储到单个文件中。因此,从某种“从核心到”的角度来看,无论您使用的是表还是数据库,MySQL都不会非常关心,因为它会将它存储到同一个文件中。从那里开始,我们得知文件是否碎片化(如果在机械磁盘上)以及许多其他有趣的细节,这些细节无法在单个答案中涵盖。
这将我们带到下一期 - 存在用于存储结构化数据的数据库。 数据库不是美化的文本文件。它们存在,因此我们可以要求他们盘问数据并为问题提供有意义的结果。 这意味着我们以对应于某些逻辑的方式设计数据库和表。如果将这些临时表存储到数据库A中是有意义的,那么将其存储起来。如果做其他事情是有意义的 - 做另一件事。
从性能的角度来看,在很大程度上取决于如何配置服务器,从操作系统到MySQL变量,以及您拥有的硬件(尤其是硬盘)。不知道那里发生了什么,直到最后的细节 - 没有人可以告诉你“是的,它更快”,“不是它慢”或“它是相同的”。如果他们这样做 - 他们撒谎。我们基本上缺乏一切可能的信息来确定哪种方法更好。