【问题标题】:Can you index tables differently on Master and Slave (MySQL)您可以在主从 (MySQL) 上以不同方式索引表吗
【发布时间】:2011-05-23 16:42:33
【问题描述】:

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

【问题讨论】:

    标签: mysql replication alter-table indexing


    【解决方案1】:

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

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

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

    【讨论】:

    • 如何修改从表?
    【解决方案2】:

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

    • SELECTS 中通过FORCE/USE/IGNORE INDEX 引用索引会出错
    • 在主服务器上的 ALTER 语句中引用索引可能会中断复制
    • 在紧急情况下增加另一个步骤来提升从属设备为主设备
    • 如果您使用基于语句的复制(标准),并且您正在使用UNIQUE 索引,那么任何INSERT... ON DUPLICATE KEYINSERT IGNOREREPLACE 语句都会导致极端的数据漂移/分歧李>
    • 性能差异(好的和坏的)

    【讨论】:

    • 如何修改从表?
    • @jeffry 你需要将服务器变量read_only 设置为0
    【解决方案3】:

    当然,我认为将 InnoDB 表复制到从站上的 MyISAM 表中以添加全文索引甚至是一种常见的做法。

    【讨论】:

      猜你喜欢
      • 2022-12-29
      • 2015-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-15
      • 1970-01-01
      • 2012-01-20
      • 1970-01-01
      相关资源
      最近更新 更多