InnoDB полнотекстовый поиск

Как известно, для движка InnoDB полнотекстовый поиск до версии 5.6.4 не поддерживается по сравнению с MyISAM, что является главным его минусом на фоне такого плюса как быстродействие. С версиями MySQL старше 5.6.4 никаких трудностей нет и полнотекстовый поиск предполагающий возможность поиска по нескольким полям также реализована.

 
Полнотекстовый поиск — возможность поиска совпадений по шаблону в таблицах БД по отдельным словам и словам, разделенным пробелами.

 

 

InnoDB полнотекстовый поиск: возможности реализации

Самым популярным решением является создание на движке зеркала таблицы использующего MyISAM. Таким образом существует одновременно две полностью идентичных таблицы различающихся названием и типом используемого движка. Для таблицы в MyISAM задается индекс FULLTEXT.
 
Информация записывается в две таблицы одновременно (для этого используется запрос соответствующего синтаксиса), читаются данные из таблицы в InnoDB, поиcк происходит по таблице в MyISAM. Самым явным минусом такого решения является необходимость хранить все данные в двойном объеме, что не критично для небольших проектов.

MyISAM InnoDB ptркало
Вторым вариантом является задание ключевых слов. Результаты каждого запроса «разбираются» на ряд записей во вспомогательной таблице. Выбираются ключевые для поиска слова, и в новую таблицу MyISAM заносится соответствие ключевого слова и идентификатора. Количество записей во вспомогательной таблице при этом будет равно количеству ключевых слов. В таблице 2 поля «ID» и «OTHERS». «ID» будет соответствовать идентификатору в основной таблице, в поле «OTHERS» будут записываться ключевые слова.
 

 
Предположим, в основной InooDB таблице присутствовали данные: id=23; name=Tom; age=26; city=NY. В таблицу созданную для поиска попадут 23, Tom, 26 и NY — это и будут ключевые слова. 4 ключевых слова в таблице будут созданы для каждого объекта в таблице InooDB.
InnoDB полнотекстовый поиск

Третьим способом является разбиение запроса на слова и поиск по ним при помощи оператора LIKE, поиск при этом производится по InnoDB без использования MyISAM. Этот способ является самым медленным

 

 

При использовании современных версий MySQL необходимости в подобных схемах практически отпала, однако применение их возможно.

Читайте про различия между MyISAM и InnoDB