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

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

Ответы [ 3 ]

16 голосов
/ 10 декабря 2010

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

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

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

15 голосов
/ 11 декабря 2010

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

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

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

...