Подтвердить что ты не робот

Можете ли вы индексировать таблицы по-разному на Master и Slave (MySQL)

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

4b9b3361

Ответ 1

Я так считаю. После того, как репликация работает, вы можете отбросить индексы на подчиненном устройстве и создать нужные вам индексы, и это должно быть сделано. Поскольку MySQL реплицирует операторы, а не данные (по крайней мере, по умолчанию), если SQL, необходимый для вставки или обновления или выбора из таблицы, не требуется изменять, он не должен замечать.

Теперь, очевидно, есть недостатки. Если вы создадите уникальный ключ, который не находится на главном компьютере, вы можете получить данные, вставленные в мастер, которые не могут быть вставлены на подчиненный. Если обновление выполнено с использованием индекса, он может быстро запускаться на главном компьютере, но вызывает сканирование таблицы на подчиненном устройстве (поскольку у вас нет никакого индекса, который был бы удобен).

И если какие-либо изменения DDL когда-либо произойдут на сервере (например, чтобы изменить индекс), который будет передан ведомому, и там будет создан новый индекс, даже если вы этого не хотите.

Ответ 2

Конечно. Я делаю это все время. Проблемы, с которыми я столкнулся:

  • Ссылка на индексы с помощью FORCE/USE/IGNORE INDEX в SELECTS приведет к ошибке
  • Ссылка на индексы в ALTER статутах мастера может разбить репликацию
  • Добавляет еще один шаг к продвижению подчиненного устройства в качестве главного в случае чрезвычайной ситуации.
  • Если вы используете репликацию на основе утверждений (норма), и вы играете с индексами UNIQUE, любые статусы INSERT... ON DUPLICATE KEY, INSERT IGNORE или REPLACE будут вызывать экстремальные дрейфы/расхождения данных
  • Различия в производительности (как хорошие, так и плохие)

Ответ 3

Конечно, я считаю, что даже обычной практикой является копирование таблиц InnoDB в таблицы MyISAM на ведомом, чтобы иметь возможность добавлять полнотекстовые индексы.