【发布时间】:2011-05-23 16:42:33
【问题描述】:
是否可以在只读从属设备上设置不同的索引,而不是在主设备上?基本上,考虑到两个系统的不同要求,这似乎是有道理的,但我想确保它能够正常工作并且不会引起任何问题。
【问题讨论】:
标签: mysql replication alter-table indexing
是否可以在只读从属设备上设置不同的索引,而不是在主设备上?基本上,考虑到两个系统的不同要求,这似乎是有道理的,但我想确保它能够正常工作并且不会引起任何问题。
【问题讨论】:
标签: mysql replication alter-table indexing
我相信是的。复制工作后,您可以删除从属服务器上的索引并创建您想要的索引并且应该这样做。由于 MySQL 复制的是语句而不是数据(至少默认情况下),只要插入或更新或从表中选择所需的 SQL 不需要更改,它就不会注意到。
现在这显然有缺点。如果您创建一个不在主服务器上的唯一密钥,您可能会在主服务器上插入无法插入从服务器的数据。如果使用索引完成更新,它可能会在主服务器上运行得很快,但会导致在从服务器上进行表扫描(因为您没有任何方便的索引)。
如果主服务器上发生任何 DDL 更改(例如更改索引),这些更改将传递给从服务器,并且新索引也将在那里创建,即使您不希望它这样做。
【讨论】:
当然。我一直都这样做。我遇到的问题:
SELECTS 中通过FORCE/USE/IGNORE INDEX 引用索引会出错ALTER 语句中引用索引可能会中断复制UNIQUE 索引,那么任何INSERT... ON DUPLICATE KEY、INSERT IGNORE 或REPLACE 语句都会导致极端的数据漂移/分歧李>
【讨论】:
read_only 设置为0
当然,我认为将 InnoDB 表复制到从站上的 MyISAM 表中以添加全文索引甚至是一种常见的做法。
【讨论】: