您可以在主从 (MySQL) 上以不同方式索引表吗
Posted
技术标签:
【中文标题】您可以在主从 (MySQL) 上以不同方式索引表吗【英文标题】:Can you index tables differently on Master and Slave (MySQL) 【发布时间】:2011-05-23 16:42:33 【问题描述】:是否可以在只读从属设备上设置不同的索引,而不是在主设备上?基本上,考虑到两个系统的不同要求,这似乎是有道理的,但我想确保它能够正常工作并且不会引起任何问题。
【问题讨论】:
【参考方案1】:我相信是的。复制工作后,您可以删除从属服务器上的索引并创建您想要的索引并且应该这样做。由于 mysql 复制的是语句而不是数据(至少默认情况下),只要插入或更新或从表中选择所需的 SQL 不需要更改,它就不会注意到。
现在这显然有缺点。如果您创建一个不在主服务器上的唯一密钥,您可能会在主服务器上插入无法插入从服务器的数据。如果使用索引完成更新,它可能会在主服务器上运行得很快,但会导致在从服务器上进行表扫描(因为您没有任何方便的索引)。
如果主服务器上发生任何 DDL 更改(例如更改索引),这些更改将传递给从服务器,并且新索引也将在那里创建,即使您不希望它这样做。
【讨论】:
如何修改从表?【参考方案2】:当然。我一直都这样做。我遇到的问题:
在SELECTS
中通过FORCE/USE/IGNORE INDEX
引用索引会出错
在主服务器上的 ALTER
语句中引用索引可能会中断复制
在紧急情况下增加另一个步骤来提升从属设备为主设备
如果您使用基于语句的复制(标准),并且您正在使用UNIQUE
索引,那么任何INSERT... ON DUPLICATE KEY
、INSERT IGNORE
或REPLACE
语句都会导致极端的数据漂移/分歧李>
性能差异(好的和坏的)
【讨论】:
如何修改从表? @jeffry 你需要将服务器变量read_only
设置为0
【参考方案3】:
当然,我认为将 InnoDB 表复制到从站上的 MyISAM 表中以添加全文索引甚至是一种常见的做法。
【讨论】:
以上是关于您可以在主从 (MySQL) 上以不同方式索引表吗的主要内容,如果未能解决你的问题,请参考以下文章
您可以在 iPhone 上以编程方式在地址簿中设置联系人的图像吗?