3

我正在处理的项目对于需要搜索的每一列都有一个名为“ft[columnname]”的第二列,它有一个 FULLTEXT 索引,并且只搜索这一列。

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

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

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

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

4

2 回答 2

1

您的特定应用程序可能有功能优势,但重复存储数据在很大程度上会影响性能 - 而不是优势。

由于您的数据现在是两倍大,假设一个足够大的数据集,只有一半的数据可以保存在不同级别的缓存中(例如 MySQL、OS),所以您将更多地从磁盘读取,这是正常的瓶颈。

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

于 2010-11-17T21:23:25.233 回答
-3

老实说,您不应该在第二列中执行此操作,因为这样做意味着您将MyISAM存储引擎用于生产表。(或者如果您有能力丢失一些数据,请继续)。

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

于 2010-08-12T16:59:25.283 回答