Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在不同数据库之间执行连接的建议_Mysql_Sql - Fatal编程技术网

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

Mysql 在不同数据库之间执行连接的建议,mysql,sql,Mysql,Sql,我有两个数据库,一个是实体表,另一个是引用实体数据的报告表。最初,这些表共存于同一数据库实例中,报表查询可以直接与实体表连接。出于体系结构的原因,报表被拆分为一个单独的MySQL实例,不再能够直接与实体表连接。对于大多数情况,这不是问题,因为可以通过对报告数据进行一次查询,然后对实体数据库进行第二次查询来生成报告,以填充缺少的实体数据 但是,在某些情况下,当报表查询需要通过实体表中的数据进行过滤时,需要首先查询实体表,然后作为报表查询的一部分传递实体ID列表。例如: SELECT * FROM

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

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

SELECT * FROM FOO_REPORTS WHERE DATE BETWEEN X AND Y AND FOO_ID IN (1,2,3,4,5,6...)
这很尴尬,但大多数情况下都有效。我们遇到的问题是,在某些情况下,where子句会导致查询超过MySQL最大数据包长度。与其随意增加最大数据包长度,我想知道是否有其他方法可以解决这个问题

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

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


有其他建议吗?

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