我有两个数据库,一个带有实体表,另一个带有引用实体数据的报告表。最初这些表共存于同一个数据库实例中,报表查询可以直接与实体表连接。出于架构原因,报告被拆分为单独的MySQL实例,并且不再可能直接与实体表连接。对于大多数情况,这不是问题,因为可以使用针对报告数据的一个查询生成报告,然后针对实体数据库生成第二个查询以填充缺少的实体数据。
但是,在某些情况下,当报表查询需要通过实体表中的数据进行过滤时,需要首先查询实体表,然后将实体ID列表作为报表查询的一部分进行传递。例如:
SELECT * FROM FOO_REPORTS WHERE DATE BETWEEN X AND Y AND FOO_ID IN (1,2,3,4,5,6...)
这很尴尬,但大部分时间都有效。我们遇到的问题是,在某些情况下,where子句可能导致查询超过MySQL最大数据包长度。我不知道是否有其他方法可以解决这个问题,而不是随意增加最大数据包长度。
我考虑过创建一个临时表并使用过滤器列表填充它并对其执行连接。插入可以拆分为多个语句,以避免达到最大数据包长度。
我还考虑过以编程方式过滤报告中的结果,但这样做会破坏报告分页。
任何其他建议?
答案 0 :(得分:0)
如果在MySQL实例之间设置主 - 主复制,则可以在同一个框上运行两个数据库的查询。这将假设您在MySQL服务器之间具有网络连接以允许复制。