Преобразование таблицы 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;
Другие вопросы по тегам