INDEX或FULLTEXT在MySql中存储VARCHAR(1000)

时间:2013-03-02 19:32:13

标签: mysql indexing varchar full-text-indexing

我的目的
我需要进行SELECT WHERE string IN ('...')次查询,stringVARCHAR (1000)

问题:
我不知道我是否应该使用 FULLTEXT 索引,或者仅使用简单的 INDEX

问题:
搜索将在查询中使用两个类似的表格进行多个UNION,其中包含string字段,因此我不知道 FULLTEXT 是否会使这更快或更快。
(我对FULLTEXT索引的想法是将它们与MATCH AGINST查询一起使用)

结构:
您可以在How to structure this DATABASE idea

之前的问题中查看我在不同表格中构建多个string字段的方式

注意:
这个问题是关于哪种类型的INDEX更适合这种情况。我只是将结构问题联系起来,以便读者更多地参考我正在做的事情。它不是重复的。

1 个答案:

答案 0 :(得分:3)

<强> 1-N

如果你的单词和短语很常见并且会在很多行之间重复,你应该考虑将它们分成1-n关系。这样,通过将数据与数据相结合,搜索和查询数据可能会更有效。这可能不符合您的要求 - 这完全取决于单词和短语的类型。

<强> FULLTEXT

索引varchar 1000是一个坏主意(我不喜欢做出假设,但这通常总是很糟糕)。如果你的数据集增长,它不仅会使用大量的内存和索引空间,而且当它开始成为一个问题时,它将成为一个难以解决的性能瓶颈。这就是FULLTEXT存在的原因,如果您使用MySQL 5.6或更高版本,您现在也可以在INNODB表上使用FULLTEXT - 如果您使用的是旧版本,那么很遗憾只支持它在MyISAM中,存储引擎有缺点(一些相当大的,所以请在选择之前进行研究)。

正确搜索

最佳解决方案是使用适当的搜索引擎,例如LuceneSphinxXapian