我的目的:
我需要进行SELECT WHERE string IN ('...')
次查询,string
是VARCHAR (1000)
问题:
我不知道我是否应该使用 FULLTEXT 索引,或者仅使用简单的 INDEX
问题:
搜索将在查询中使用两个类似的表格进行多个UNION
,其中包含string
字段,因此我不知道 FULLTEXT 是否会使这更快或更快。
(我对FULLTEXT索引的想法是将它们与MATCH AGINST查询一起使用)
结构:
您可以在How to structure this DATABASE idea
string
字段的方式
注意:
这个问题是关于哪种类型的INDEX更适合这种情况。我只是将结构问题联系起来,以便读者更多地参考我正在做的事情。它不是重复的。
答案 0 :(得分:3)
<强> 1-N 强>
如果你的单词和短语很常见并且会在很多行之间重复,你应该考虑将它们分成1-n关系。这样,通过将数据与数据相结合,搜索和查询数据可能会更有效。这可能不符合您的要求 - 这完全取决于单词和短语的类型。
<强> FULLTEXT 强>
索引varchar 1000是一个坏主意(我不喜欢做出假设,但这通常总是很糟糕)。如果你的数据集增长,它不仅会使用大量的内存和索引空间,而且当它开始成为一个问题时,它将成为一个难以解决的性能瓶颈。这就是FULLTEXT存在的原因,如果您使用MySQL 5.6或更高版本,您现在也可以在INNODB表上使用FULLTEXT - 如果您使用的是旧版本,那么很遗憾只支持它在MyISAM中,存储引擎有缺点(一些相当大的,所以请在选择之前进行研究)。
正确搜索