如何搜索文字?(MySQL的)

dav*_*vid 8 mysql sql search

我有这张桌子:

bussId    |      nameEn        |          keywords
  500          name1 name2             keyword1 keyword2
Run Code Online (Sandbox Code Playgroud)

如果用户搜索(keyword1或keyword2或name2或name1),我想返回bussId 5000.所以我应该使用这个查询SELECT * FROM business WHERE nameEn LIKE '%searched_word%'.但是index nameEn or keywords根据B-Tree和Hash Indexes的比较,这个查询不使用"如果参数to LIKE是一个不以通配符开头的常量字符串,那么索引也可以用于LIKE比较".

我有这个解决方案,我想创建另一个表并插入所有单个单词:

bussId |  word
  500        name1
  500        name2
  500        keyword1
  500        keyword2
Run Code Online (Sandbox Code Playgroud)

然后我将使用此查询搜索bussId:
SELECT * WHERE word LIKE 'searched_word%'.

通过这种方式,我将确保MySQL将使用索引,它会更快,但这个表将包含大约2000万行!

还有其他解决方案吗?

Ada*_*dam 7

您必须使用MyISAM或来自MySQL 5.6的InnoDB的全文索引:

mysql> ALTER TABLE business ADD FULLTEXT(nameEn, keywords);
Run Code Online (Sandbox Code Playgroud)

这是你的要求:

mysql> SELECT * FROM business
   -> WHERE MATCH (nameEn, keywords) AGAINST ('searched_word');
Run Code Online (Sandbox Code Playgroud)

  • 自MySQL 5.6以来,InnoDB还支持全文搜索. (3认同)