2012-09-11 20 views
2

长话短说 - 我正在处理一个大型数据库,其中基本用户详细信息(用户标识(索引),用户名,密码,父用户,状态)存储在一个数据库和扩展用户详细信息(相同的用户标识(索引),全名,地址等)存储在另一台服务器上的另一个数据库中。MySQL联合存储引擎与复制(性能)

我需要做一个查询,在这里我选择由特定用户拥有的所有用户(通过基本用户详细信息数据库中的父用户字段),按其全名(来自扩展用户详细信息字段)排序,一个时间(对于任何一个用户来说有成千上万个,也许有几万个)。

据我所知,有三种可能的解决方案;

  1. 无JOIN - 在一个查询中获取所有用户ID,并根据这些ID运行第二个查询。这很好,除非用户ID的数量可能会变得太高以至于超过最大查询长度,或者效率非常低。

  2. 复制的基本用户信息的数据库表到服务器扩展的细节,所以我可以做一个JOIN

  3. 使用联合存储引擎表来实现相同的结果#2

看起来3是最好的选择,但我一直能够找到关于性能的很少的信息,并且我还发现一个注释要在生产数据库中使用它。

对于什么是最佳实施方案,我将不胜感激。

谢谢!

回答

2

谈到性能或限制,Federated Engine有很多limitations。它不支持交易,执行批量插入时FEDERATED表上的性能比其他表类型等要慢。

Replication和联合引擎并不意味着要做同样的事情。首先,你是否都尝试过?

2

FEDERATED表是一个很好的功能..但他们不支持索引,这会显着减慢你的应用程序。

if(!)you do read only from the users database on the remote server。 复制会更有效,也更快。