你可以在Master和Slave(MySQL)上对表进行不同的索引吗

时间:2010-12-10 19:44:52

标签: mysql replication alter-table indexing

是否可以在主设备上为只读从设备设置不同的索引?基本上,考虑到两个系统的不同要求,这似乎是有道理的,但我想确保它能够工作而不会造成任何问题。

3 个答案:

答案 0 :(得分:15)

我相信。复制工作后,您可以删除从属服务器上的索引并创建所需的索引,并且应该这样做。由于MySQL复制语句而不是数据(至少在默认情况下是这样),只要插入或更新或从表中选择所需的SQL不需要更改,就不应该注意。

现在明显存在缺点。如果您创建了一个不在主服务器上的唯一密钥,则可能会在主服务器上插入无法插入从服务器的数据。如果完成了使用索引的更新,它可能会在主服务器上快速运行,但会在从服务器上进行表扫描(因为您没有任何方便的索引)。

如果在主服务器上发生任何DDL更改(例如更改索引)将传递给从服务器,并且也会在那里创建新索引,即使您不希望它。 / p>

答案 1 :(得分:15)

当然可以。我一直这样做。我遇到的问题:

  • 通过FORCE/USE/IGNORE INDEX中的SELECTS引用索引会出错
  • 在主服务器上的ALTER个参数中引用索引可能会破坏复制
  • 在紧急情况下添加另一个步骤以促使奴隶成为主人
  • 如果您正在使用基于语句的复制(规范),并且正在使用UNIQUE索引,那么任何INSERT... ON DUPLICATE KEYINSERT IGNOREREPLACE个参数都将引起极端数据漂移/分歧
  • 表现差异(好与坏)

答案 2 :(得分:2)

当然,我认为将InnoDB表复制到slave上的MyISAM表以便能够添加全文索引是一种常见的做法。