MySQL 8.3 Release Notes
当使用基于行的复制格式的副本应用UPDATE
或DELETE
操作时,它必须在相关表中搜索匹配的行。该算法使用表中的一个索引来执行搜索作为首选,如果没有合适的索引,则使用哈希表。
该算法首先评估表定义中的可用索引,以确定是否有合适的索引可用于搜索,并且如果有多个可能的索引,哪个索引是最适合操作的。
-
该算法忽略以下类型的索引:
-
全文索引。
-
隐藏索引。
-
生成索引。
-
多值索引。
任何索引,其中行事件的before-image不包含索引的所有列。
-
如果没有合适的索引,算法不使用索引进行搜索。如果有合适的索引,算法从候选索引中选择一个,按照以下优先顺序:
-
主键。
-
具有NOT NULL属性的唯一索引。如果有多个这样的索引,算法选择最左边的索引。
任何其他索引。如果有多个这样的索引,算法选择最左边的索引。
如果算法能够选择主键或具有NOT NULL属性的唯一索引,它将使用该索引来迭代UPDATE
或DELETE
操作中的行。对于每个行事件中的行,算法在索引中查找该行以定位要更新的表记录。如果没有找到匹配的记录,它将返回错误ER_KEY_NOT_FOUND并停止复制应用程序线程。