关于在不同数据库之间执行连接的建议

时间:2014-03-10 20:29:05

标签: mysql sql

我有两个数据库,一个带有实体表,另一个带有引用实体数据的报告表。最初这些表共存于同一个数据库实例中,报表查询可以直接与实体表连接。出于架构原因,报告被拆分为单独的MySQL实例,并且不再可能直接与实体表连接。对于大多数情况,这不是问题,因为可以使用针对报告数据的一个查询生成报告,然后针对实体数据库生成第二个查询以填充缺少的实体数据。

但是,在某些情况下,当报表查询需要通过实体表中的数据进行过滤时,需要首先查询实体表,然后将实体ID列表作为报表查询的一部分进行传递。例如:

SELECT * FROM FOO_REPORTS WHERE DATE BETWEEN X AND Y AND FOO_ID IN (1,2,3,4,5,6...)

这很尴尬,但大部分时间都有效。我们遇到的问题是,在某些情况下,where子句可能导致查询超过MySQL最大数据包长度。我不知道是否有其他方法可以解决这个问题,而不是随意增加最大数据包长度。

我考虑过创建一个临时表并使用过滤器列表填充它并对其执行连接。插入可以拆分为多个语句,以避免达到最大数据包长度。

我还考虑过以编程方式过滤报告中的结果,但这样做会破坏报告分页。

任何其他建议?

1 个答案:

答案 0 :(得分:0)

如果在MySQL实例之间设置主 - 主复制,则可以在同一个框上运行两个数据库的查询。这将假设您在MySQL服务器之间具有网络连接以允许复制。