我的目的:
我需要进行SELECT WHERE string IN ('...')
查询,string
是VARCHAR (1000)
:
我不知道我是否应该使用FULLTEXT索引或者只是一个简单的 index
问题:
搜索将在查询中使用两个类似的表进行多个UNION
,其中包含string
字段,因此我也不知道FULLTEXT是否会使此更快。(我对FULLTEXT索引的想法是将它们与MATCH against查询一起使用)
你可以看到我是如何在不同的表中构建我的多个string
字段在我之前的问题如何构建这个数据库的想法
注意:
这个问题是关于哪种类型的INDEX更适合这种情况。我只是把结构化问题联系起来,让读者对我正在做的事情有更多的参考。
1-N
如果你的单词和短语是常见的,并且将在许多行之间重复,你应该考虑将它们分离成1-n的关系。这样,通过将数据与您的数据连接起来,搜索和查询数据可能会更有效。这可能不符合您的要求——这完全取决于单词和短语的类型。
全文
索引一个varchar 1000是一个坏主意(我不喜欢做假设,但这通常总是不好的)。这不仅会使用大量的内存和索引空间,如果你的数据集增长,这将是一个难以解决的性能瓶颈,当它开始成为一个问题。这就是FULLTEXT存在的原因,如果你使用MySQL 5.6或更高版本,你现在也可以在INNODB表上使用FULLTEXT -如果你使用的是旧版本,它将不幸只支持MyISAM,并且存储引擎有缺点(一些相当大的缺点,所以请在选择它之前研究一下)。
正确的搜索
最好的解决方案是使用合适的搜索引擎,如Lucene, Sphinx或Xapian