如何加快搜索MySQL?是否可以使用特殊字符进行全文搜索?

时间:2016-01-10 18:51:19

标签: mysql indexing full-text-search

我在VARCHAR InnoDB表列中有以下字符串:

"This is a {{aaaa->bbb->cccc}} and that is a {{dddd}}!"

现在,我想搜索例如{{xxx->yyy->zzz}}。括号是字符串的一部分。有时与另一个列一起搜索,但只包含一个普通的id,因此不需要考虑(我猜)。

我知道我可以使用LIKE或REGEXP。但这些(已经尝试过的)方式太慢了。我可以引入全文索引吗?或者我应该添加另一个帮助表?我应该替换特殊字符{}->来获取全文搜索的字词吗?或者我还能做什么?

搜索工作有大约一万行,我认为我经常得到大约一百次点击。

1 个答案:

答案 0 :(得分:0)

此链接应该为您提供有关MySQL中FULLTEXT索引所需的所有信息。

MySQL dev site

您需要特别注意的部分是:

“使用MATCH()... AGAINST语法执行全文搜索.MATCH()采用以逗号分隔的列表来命名要搜索的列.AGAINST需要一个字符串来搜索,以及一个可选的修饰符指示要执行的搜索类型。搜索字符串必须是在查询评估期间保持不变的字符串值。例如,这会排除表格列,因为每行可能不同。“

简而言之,要回答您的问题,您应该通过在宽VARCHAR列上实施全文索引来看到查询执行时间的改进。 提供您正在使用兼容的存储引擎(InnoDB或MyISAM)

此处还有一个示例,说明如何查询全文索引以及问题中暗示的其他ID字段:

SELECT * 
FROM table 
WHERE MATCH (fieldlist) AGAINST ('search text here') 
    AND ( field2= '1234');