MySQL联合存储引擎与复制(性能)

时间:2012-09-11 20:05:49

标签: mysql replication federated-storage-engine

长话短说 - 我正在处理一个较大的数据库,其中基本用户详细信息(用户ID(索引),用户名,密码,父用户,状态)存储在一个数据库和扩展用户详细信息(相同的用户ID(索引),完整名称,地址等)存储在另一台服务器上的另一个数据库中。

我需要进行一个查询,我选择特定用户拥有的所有用户(通过基本用户详细信息数据库中的父用户字段),按其全名(来自扩展用户详细信息字段)排序,只需25时间(对于任何一个用户,有数千甚至数万)。

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

  1. No JOIN - 在一个查询中获取所有用户ID,并根据这些ID运行第二个查询。这样可以,但用户ID的数量可能会超过最大查询长度,或者效率非常低。

  2. 将具有基本用户详细信息的数据库表复制到服务器上,并附带扩展的详细信息,以便我可以进行加入

  3. 使用联合存储引擎表可以获得与#2

  4. 相同的结果

    似乎3是最好的选择,但我能找到关于性能的一些信息,我还发现一条注释要小心在生产数据库上使用它。

    我很感激有关最佳实施的建议。

    谢谢!

2 个答案:

答案 0 :(得分:3)

FEDERATED表是一个不错的功能..但它们不支持索引,这会大大减慢您的应用程序。

if(!)只能从远程服务器上的用户数据库中读取。 复制会更有效,也更快。

答案 1 :(得分:2)

在性能或限制方面,Federated Engine有很多limitations。它不支持事务,执行批量插入时FEDERATED表上的性能比其他表类型等慢。

Replication和联合引擎并不意味着做同样的事情。首先,你试过两个吗?