Spec-Zone.ru › MySQL 8.4

19.5.1.27 Репликация и поиск строк

Когда реплика, использующая формат репликации на основе строк, применяет операцию UPDATE или DELETE, она должна найти соответствующие строки в соответствующей таблице. Алгоритм, используемый для этого процесса, в первую очередь использует один из индексов таблицы для поиска, а если подходящих индексов нет, использует хэш-таблицу.

Алгоритм сначала оценивает доступные индексы в определении таблицы, чтобы увидеть, есть ли подходящий индекс для использования, и если есть несколько вариантов, какой индекс лучше всего подходит для операции. Алгоритм игнорирует следующие типы индексов:

  • Индексы полнотекстового поиска.

  • Скрытые индексы.

  • Сгенерированные индексы.

  • Индексы с множественными значениями.

  • Любой индекс, где предшествующее изображение строки события не содержит все столбцы индекса.

Если после исключения этих типов индексов подходящих индексов не найдено, алгоритм не использует индекс для поиска. Если подходящие индексы есть, один индекс выбирается из кандидатов в следующем порядке приоритетов:

  1. Первичный ключ.

  2. Уникальный индекс, где каждый столбец в индексе имеет атрибут NOT NULL. Если таких индексов несколько, алгоритм выбирает левосторонний из этих индексов.

  3. Любой другой индекс. Если таких индексов несколько, алгоритм выбирает левосторонний из этих индексов.

Если алгоритм может выбрать первичный ключ или уникальный индекс, где каждый столбец в индексе имеет атрибут NOT NULL, он использует этот индекс для итерации по строкам в операции UPDATE или DELETE. Для каждой строки в событии строки алгоритм ищет строку в индексе, чтобы найти запись в таблице для обновления. Если соответствующая запись не найдена, он возвращает ошибку ER_KEY_NOT_FOUND и останавливает поток приложения репликации.

Если алгоритм не смог найти подходящий индекс или смог найти только не уникальный индекс или индекс, содержащий NULL-значения, для поиска записей в таблице используется хэш-таблица. Алгоритм создаёт хэш-таблицу, содержащую строки в операции UPDATE или DELETE, где ключ — полное предшествующее изображение строки. Затем алгоритм итерируется по всем записям в целевой таблице, используя выбранный индекс, если он был найден, или же выполняя полный сканирование таблицы. Для каждой записи в целевой таблице он определяет, существует ли эта строка в хэш-таблице. Если строка найдена в хэш-таблице, запись в целевой таблице обновляется, а строка удаляется из хэш-таблицы. После проверки всех записей в целевой таблице алгоритм проверяет, пуста ли теперь хэш-таблица. Если в хэш-таблице остались несопоставленные строки, алгоритм возвращает ошибку ER_KEY_NOT_FOUND и останавливает поток приложения репликации.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/replication-features-row-searches.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API