6

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

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

但是,我想知道这是否真的会加快查询速度,据我所知,FULLTEXT-index 是一个带有拆分词的表(“Hello Sunny day”->“hello”、“sunny”、“ day"),所以如果每列只有一个词,那有什么意义吗?

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

预先感谢您的帮助!

4

2 回答 2

3

使用 FULLTEXT 索引会有所帮助。它将文本拆分为单词,但随后它也会索引这些单词。正是这种索引加快了查询速度。但是您需要使用全文搜索功能,而不是 LIKE,才能利用索引。

一个正常的索引不会帮助你。LIKE 子句只有在具有常量前缀的情况下才能利用索引。

  • yourcolumn LIKE 'searchterm%'将使用索引。
  • yourcolumn LIKE '%searchterm%'不会使用索引。
于 2012-04-28T23:45:51.530 回答
0

全文搜索或全文索引对您有什么不利吗?就我个人而言,我错过了搜索单词的一部分,例如“ByteArray”中的“Array”。

您可以考虑我在这里介绍的方法:

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

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

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

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

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

于 2014-12-11T17:18:45.407 回答