Ключ FULLTEXT слишком длинный - PullRequest
1 голос
/ 09 августа 2010

При попытке добавить индекс FULLTEXT к заголовку, изданию и автору в моей базе данных MySQL появляется следующая ошибка:

Указанный ключ был слишком длинным;максимальная длина ключа составляет 1000 байтов

Вот столбцы:

`Title` varchar(255) NOT NULL,
`Edition` varchar(20) default NULL,
`Authors` varchar(255) default NULL,

Ни один из них не является уникальным .. Даже комбинация всех 3 не уникальна.Первичный ключ в базе данных - это ISBN.

Причина, по которой я добавляю этот индекс FULLTEXT, заключается в том, что люди могут искать книги по ключевому слову, которое может включать в себя название, издание или автора.

1 Ответ

2 голосов
/ 09 августа 2010

MySQL имеет ограничение на количество места, выделенного для индексов - это 1000 байтов для MyISAM, 767 для InnoDB .

Единственный способ обойти это ограничение - определить ключи, которые индексируют часть столбца - это означает, что это все, что будет в индексе, ограничивая его значение:

CREATE INDEX index_name ON YOUR_TABLE(title(100), edition, authors(100));

Индексирует первые 100 символов столбца заголовка, весь столбец издания и 100 символов столбца авторов. Я считаю, что для столбцов VARCHAR это соотношение 3: 1, поэтому VARCHAR (250) занимает 750 байтов.

...