MySQL :(全文/索引)搜索“一字列”

时间:2012-04-28 23:43:33

标签: mysql full-text-search wildcard sql-like

我有一个表(MySQL 5.1,InnoDB),大约有3M行,其中98%只包含一个单词。如果我使用LIKE %searchterm%运行查询,则速度太慢。

由于只有SELECT查询此表,我正在考虑将其转换为MyISAM(因为InnoDB还没有,或者仅适用于5.6+版本,支持FULLTEXT)。

然而,我想知道这是否会真正加快查询速度,因为据我所知,FULLTEXT索引是一个包含分词的表格(“Hello sunny day” - >“hello”,“晴天“,”日“),所以如果每列只有一个单词,那会有意义吗?

如果我在这个文本列上放置一个普通的索引会加速查询吗?

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

使用FULLTEXT索引会有所帮助。它将文本拆分为单词,但随后它也会对这些单词进行索引。正是这种索引加速了查询。但是你需要使用full-text search functions而不是LIKE来利用索引。

普通索引对您没有帮助。如果LIKE子句具有常量前缀,则它只能利用索引。

  • yourcolumn LIKE 'searchterm%'会使用索引。
  • yourcolumn LIKE '%searchterm%'不会使用索引。

答案 1 :(得分:0)

全文搜索或全文索引是否对您构成任何不利影响?就个人而言,我错过了搜索单词的 part ,例如'数组'在' ByteArray'。

你可以考虑我在这里提出的方法:

https://stackoverflow.com/a/22531268/543814

这个想法是存储字符串的每个可能的后缀。

这需要更多存储空间,具体取决于您的字符串长度。

作为回报,您可以对这些查询使用普通索引:因为字符串的每个可能后缀都在表中,LIKE %searchterm%变为相同LIKE searchterm%

您不再需要前导%,因此可以再次使用普通索引。