我在VARCHAR InnoDB表列中有以下字符串:
"This is a {{aaaa->bbb->cccc}} and that is a {{dddd}}!"
现在,我想搜索例如{{xxx->yyy->zzz}}
。括号是字符串的一部分。有时与另一个列一起搜索,但只包含一个普通的id,因此不需要考虑(我猜)。
我知道我可以使用LIKE或REGEXP。但这些(已经尝试过的)方式太慢了。我可以引入全文索引吗?或者我应该添加另一个帮助表?我应该替换特殊字符{
,}
,-
,>
来获取全文搜索的字词吗?或者我还能做什么?
搜索工作有大约一万行,我认为我经常得到大约一百次点击。
答案 0 :(得分:0)
此链接应该为您提供有关MySQL中FULLTEXT
索引所需的所有信息。
您需要特别注意的部分是:
“使用MATCH()... AGAINST语法执行全文搜索.MATCH()采用以逗号分隔的列表来命名要搜索的列.AGAINST需要一个字符串来搜索,以及一个可选的修饰符指示要执行的搜索类型。搜索字符串必须是在查询评估期间保持不变的字符串值。例如,这会排除表格列,因为每行可能不同。“
简而言之,要回答您的问题,您应该通过在宽VARCHAR
列上实施全文索引来看到查询执行时间的改进。 提供您正在使用兼容的存储引擎(InnoDB或MyISAM)
此处还有一个示例,说明如何查询全文索引以及问题中暗示的其他ID字段:
SELECT *
FROM table
WHERE MATCH (fieldlist) AGAINST ('search text here')
AND ( field2= '1234');