创建针对FULLTEXT搜索优化的第二列是否有任何意义?

时间:2010-08-12 15:06:04

标签: sql mysql optimization full-text-search micro-optimization

我正在研究的项目对于需要搜索的每一列都有一个名为“ft [columnname]”的第二列,该列有一个FULLTEXT索引,只搜索了这一列。

此列包含“优化”文本,该文本通过以下方式从原始列自动生成:

  • 该字符串是小写的
  • 删除所有重音
  • 删除所有标点和不可搜索的字符
  • 删除所有重复的字词
  • 所有单词都从最长到最短
  • 排序
  • 我不太了解的其他转换(与组合词相关)

例如“我喜欢神奇宝贝,特别是皮卡丘!”成为“特别是像我一样的口袋妖怪皮卡丘。”

是否有任何(甚至非常小的)性能优势?数据库中的数据永远不会动态变化。

2 个答案:

答案 0 :(得分:1)

您的特定应用程序可能会有功能优势,但将数据一式两份存储在很大程度上会影响性能 - 而不是一个好处。

由于您的数据现在是两倍大,假设数据集足够大,在各种级别的缓存(例如MySQL,OS)中只能保留一半的数据,因此您将从磁盘读取数量更多,这是正常的瓶颈。

话虽如此,如果你在ft索引列上使用单字节字符集,但在原始文本上使用多字节字符集,那么你的全文索引可能比其他情况下要小得多。

答案 1 :(得分:-3)

老实说,你不应该在第二栏中这样做,因为这样做意味着你正在使用 MyISAM 存储引擎作为生产表。 (或者,如果你能承受丢失一些数据,请继续)。

事实上,您确实关心性能,因此您应该考虑使用功能强大的全文搜索引擎,例如 Sphinx http://www.sphinxsearch.com/