Преобразование таблицы MYISAM в INNODB, если длинные ключи уникальны
Так как MYISAM блокирует всю таблицу каждый раз, я думаю о преобразовании моей таблицы MYISAM в InnoDB. Однако INNODB требует, чтобы уникальный и первичный ключи были в пределах 767 байтов.
Итак, я получаю эту ошибку:-
#1071 - Specified key was too long; max key length is 767 bytes
Мои уникальные ключи немного длинны. Итак, как мне лучше всего преобразовать свою таблицу в INNODB?
Вот скриншот с описанием моей таблицы
Спасибо
2 ответа
Предполагая, что ключи, которые вы видите на скриншоте, - это все, что у вас есть, ключевой вопрос здесь query_id
, Как 300-символьный столбец UTF8, он заканчивается использованием только 900 байтов.
Вам нужно ограничить индекс частью этого столбца - скажем, может быть, первые 100 символов?
DROP INDEX query_id ON tablename
CREATE INDEX query_id ON tablename (query_id, position, prod(100))
Перед преобразованием таблицы настройте ее порядок так, чтобы столбец первичного ключа был в порядке
> ALTER TABLE tablename ORDER BY 'primary_key_column';
Это позволит предварительно упорядочить таблицу, чтобы ее можно было быстро преобразовать без большого переупорядочения, требуемого в MySQL. Затем просто измените движок таблицы:
> ALTER TABLE tablename ENGINE = INNODB;