【发布时间】:2015-06-24 02:03:37
【问题描述】:
我有这张桌子:
bussId | nameEn | keywords
500 name1 name2 keyword1 keyword2
如果用户搜索(关键字 1 或关键字 2 或名称 2 或名称 1),我想返回 bussId 5000。
所以我应该使用这个查询SELECT * FROM business WHERE nameEn LIKE '%searched_word%'。
但是这个查询不使用index nameEn or keywords,根据Comparison of B-Tree and Hash Indexes“如果LIKE的参数是一个不以通配符开头的常量字符串,该索引也可以用于LIKE比较”。
我有这个解决方案,我想创建另一个表并插入所有单个单词:
bussId | word
500 name1
500 name2
500 keyword1
500 keyword2
然后我将使用以下查询搜索 bussId:SELECT * WHERE word LIKE 'searched_word%'.
这样我就可以肯定 MySQL 会使用索引,而且会更快,但是这个表会包含大约 2000 万行!
还有其他解决方案吗?
【问题讨论】:
-
SELECT * FROM business WHERE nameEn LIKE '%searched_word%' 这应该有效。我不明白它的问题。你能澄清一下吗?我在工作中一直在以相同的目的使用该查询
-
@LuigiMackenzieC.Brito 问题是查询很慢,因为它不使用索引,它搜索整个表!
-
Dang,它不会只搜索整个“命名”列吗?
-
哇,我终于学到了新东西:)