最好不要出现跨库join,应该在设计的时候就避免。
将需要join的表放在同一数据库,即便是分库分表看能不能按相同维度分到一起。
或者看能不能设冗余字段,避免关联查询。
那如果无法避免跨库join,也应该走微服务API查询,或者使用中间件实现。
比如:
1.调用两个服务API分别查询,再组装数据;
2.利用Canal,将数据同步到业务系统数据库;
3.将两个服务的数据实时同步到一个只读库,然后在只读库查询;
一定要跨库join,MySQL也是可以支持的:
1.开启FEDERATED引擎,修改my.ini(或my.cnf)文件新添加一行,内容为federated,然后重启MySQL。
2.在数据库中建立远程表,通过参数CONNECTION='mysql://username:pwd@ip:端口/库名/表名
3.直接在SQL语句使用join即可。