2014-09-12 4 views
0

мне нужен MySQL запрос для поиска текста для имени и фамилии ... Это запрос:Mysql индекс строки

SELECT * FROM people WHERE CONCAT(name,' ',surname) like 'John%' 
or CONCAT(name,' ',surname) like '% John%'; --mind the space in second like 

Этот запрос должен найти «Джон Фокс» и «Fox Джон» и «Джон Фокс Джо »и« Джо Джон Фокс »и так далее. Это работает отлично, но для больших таблиц я думаю, что я должен добавить и индексировать ... Я прав? Я читал, что индексы btree полезны только для синтаксиса like 'John%', а не для like '% John%'. Поэтому, возможно, не может быть полезно добавить новый столбец из CONCAT (name, '', surname) для нового индекса.

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

PS: Я использую таблицы innodb, поэтому я не могу использовать полнотекстовые индексы.

ответ

0

Возможно, вам стоит перейти на mysql 5.6 где FULLTEXT поддерживается в InnoDB.

http://dev.mysql.com/doc/refman/5.6/en/fulltext-search.html

+0

Несколько лет назад я использовал Полный текст с MyISAM, я нашел некоторые проблемы с стоп-слова, как «и» «тем» и так далее, потому что они были проигнорированы поисковой системой. Мой поиск должен включать в себя эти слова, настраивается ли это? – Tobia

+0

Вы можете изменить стоп-слова для каждой таблицы: http://dev.mysql.com/doc/refman/5.6/en/fulltext-stopwords.html – Mikpa