Как исправить ошибку «Указано слишком много ключей; разрешено максимум 1 ключ»? - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь изменить движок таблицы MySQL с "innodb" на "архив". Я столкнулся со следующей ошибкой:

enter image description here

Я искал его в stackoverflow безуспешно (я не нашел никакого пригодного ответа). Есть идеи, как решить проблему?

1 Ответ

1 голос
/ 23 мая 2019

Вы не можете установить AUTO_INCREMENT на конкретное значение в движке ARCHIVE. Так что просто уберите предложение auto_increment = 379.

Движок ARCHIVE не поддерживает более одного индекса на таблицу. Вы должны DROP INDEX для всех ваших вторичных индексов, оставляя максимум один индекс.

На самом деле мне не повезло с использованием хотя бы одного индекса в движке ARCHIVE. Я не использовал движок ARCHIVE достаточно часто, чтобы знать, как решить эту проблему.

mysql> alter table t add key (x);
ERROR 1030 (HY000): Got error -1 from storage engine

Немного сложно найти это в документации, но я нашел ссылки, которые показывают, что механизм хранения ARCHIVE вообще не поддерживает индексы, даже если полученная ошибка предполагает, что он поддерживает 1 индекс.

https://dev.mysql.com/doc/refman/8.0/en/storage-engines.html говорит:

Архив: эти компактные неиндексированные таблицы ...

https://dev.mysql.com/doc/refman/8.0/en/archive-storage-engine.html говорит:

Механизм хранения ARCHIVE создает специальные таблицы, в которых хранятся большие объемы неиндексированных данных в очень небольшом объеме.

Столбец AUTO_INCREMENT может иметь уникальный или неуникальный индекс. Попытка создать индекс для любого другого столбца приводит к ошибке.

Демо:

mysql> create table t ( x int auto_increment, key(x)) engine=archive;
Query OK, 0 rows affected (0.03 sec)

Это также не работает, если вы пытаетесь проиндексировать столбец, который можно обнулять.

mysql> create table t ( x int, key(x)) engine=archive;
ERROR 1121 (42000): Table handler doesn't support NULL in given index. Please change column 'x' to be NOT NULL or use another handler

Вам следует подумать, почему вы используете движок ARCHIVE. Если вы пытаетесь хранить данные в меньшем количестве места, можете ли вы использовать InnoDB с ROW_FORMAT=COMPRESSED вместо этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...