长话短说 - 我正在处理一个较大的数据库,其中基本用户详细信息(用户ID(索引),用户名,密码,父用户,状态)存储在一个数据库和扩展用户详细信息(相同的用户ID(索引),完整名称,地址等)存储在另一台服务器上的另一个数据库中。
我需要进行一个查询,我选择特定用户拥有的所有用户(通过基本用户详细信息数据库中的父用户字段),按其全名(来自扩展用户详细信息字段)排序,只需25时间(对于任何一个用户,有数千甚至数万)。
据我所知,有三种可能的解决方案;
No JOIN - 在一个查询中获取所有用户ID,并根据这些ID运行第二个查询。这样可以,但用户ID的数量可能会超过最大查询长度,或者效率非常低。
将具有基本用户详细信息的数据库表复制到服务器上,并附带扩展的详细信息,以便我可以进行加入
使用联合存储引擎表可以获得与#2
似乎3是最好的选择,但我能找到关于性能的一些信息,我还发现一条注释要小心在生产数据库上使用它。
我很感激有关最佳实施的建议。
谢谢!
答案 0 :(得分:3)
FEDERATED表是一个不错的功能..但它们不支持索引,这会大大减慢您的应用程序。
if(!)只能从远程服务器上的用户数据库中读取。 复制会更有效,也更快。
答案 1 :(得分:2)
在性能或限制方面,Federated Engine有很多limitations。它不支持事务,执行批量插入时FEDERATED表上的性能比其他表类型等慢。
Replication和联合引擎并不意味着做同样的事情。首先,你试过两个吗?