Как известно, для движка InnoDB полнотекстовый поиск до версии 5.6.4 не поддерживается по сравнению с MyISAM, что является главным его минусом на фоне такого плюса как быстродействие. С версиями MySQL старше 5.6.4 никаких трудностей нет и полнотекстовый поиск предполагающий возможность поиска по нескольким полям также реализована.
Полнотекстовый поиск — возможность поиска совпадений по шаблону в таблицах БД по отдельным словам и словам, разделенным пробелами.
InnoDB полнотекстовый поиск: возможности реализации
Самым популярным решением является создание на движке зеркала таблицы использующего MyISAM. Таким образом существует одновременно две полностью идентичных таблицы различающихся названием и типом используемого движка. Для таблицы в MyISAM задается индекс FULLTEXT.
Информация записывается в две таблицы одновременно (для этого используется запрос соответствующего синтаксиса), читаются данные из таблицы в InnoDB, поиcк происходит по таблице в MyISAM. Самым явным минусом такого решения является необходимость хранить все данные в двойном объеме, что не критично для небольших проектов.
Вторым вариантом является задание ключевых слов. Результаты каждого запроса «разбираются» на ряд записей во вспомогательной таблице. Выбираются ключевые для поиска слова, и в новую таблицу MyISAM заносится соответствие ключевого слова и идентификатора. Количество записей во вспомогательной таблице при этом будет равно количеству ключевых слов. В таблице 2 поля «ID» и «OTHERS». «ID» будет соответствовать идентификатору в основной таблице, в поле «OTHERS» будут записываться ключевые слова.
Предположим, в основной InooDB таблице присутствовали данные: id=23; name=Tom; age=26; city=NY. В таблицу созданную для поиска попадут 23, Tom, 26 и NY — это и будут ключевые слова. 4 ключевых слова в таблице будут созданы для каждого объекта в таблице InooDB.
Третьим способом является разбиение запроса на слова и поиск по ним при помощи оператора LIKE, поиск при этом производится по InnoDB без использования MyISAM. Этот способ является самым медленным
При использовании современных версий MySQL необходимости в подобных схемах практически отпала, однако применение их возможно.
Читайте про различия между MyISAM и InnoDB