我有两个数据库,一个包含实体表,另一个包含引用实体数据的报告表。最初,这些表共存于同一数据库实例中,并且报告查询可以直接与实体表联接。由于体系结构的原因,报告被拆分到一个单独的MySQL实例中,并且不再能够直接与实体表联接。对于大多数情况,这不是问题,因为可以通过对报告数据的一次查询和对实体数据库的第二次查询来生成报告,以填充缺少的实体数据。
但是,在某些情况下,当报告查询需要按实体表中的数据进行筛选时,需要首先查询实体表,然后将实体ids列表作为报告查询的一部分进行传递。例如:
SELECT * FROM FOO_REPORTS WHERE DATE BETWEEN X AND Y AND FOO_ID IN (1,2,3,4,5,6...)这很尴尬,但在大多数情况下都是有效的。我们遇到的问题是,在某些情况下,where子句可能会导致查询超过MySQL最大数据包长度。我想知道是否有其他方法来解决这个问题,而不是随意增加最大数据包长度。
我曾经考虑过创建一个临时表,并用过滤器列表填充它,然后对它执行连接。可以将插入拆分为多个语句,以避免命中最大数据包长度。
我还考虑过以编程方式从报告中过滤结果,但这样做会破坏报告分页。
有什么替代建议吗?
发布于 2014-03-11 04:40:59
如果您在MySQL实例之间设置了主-主复制,那么您可以在同一机器上为两个数据库运行查询。这将假设您在MySQL服务器之间具有允许复制的网络连接。
https://stackoverflow.com/questions/22310647
复制相似问题