完全清楚我的InnoDB表不支持FULLTEXT搜索,我想知道我在表中搜索文本的替代方法是什么?使用LIKE时性能 是不是很糟糕?
我看到很多建议说要在MYISAM表中复制InnoDB表,然后针对THAT表运行查询并匹配两者之间的键,我只是不知道这是一个非常好的解决方案。
我并不反对使用某些第三方解决方案,但我不是那么忠实于此。我想更多地了解MySQL可以自己做些什么。
想法?
答案 0 :(得分:3)
如果您想正确,您可能应该从一开始就使用Lucene或Sphinx。
Lucene和Sphinx的规模都非常出色(Lucene为维基百科和Digg / Sphinx提供强大的Slashdot功能)
答案 1 :(得分:1)
使用LIKE只能在没有前导%时使用索引。在大桌子上做LIKE'%foo%'将是一个巨大的性能打击。如果我是你,我会考虑使用sphinx。它能够使用您提供的查询通过从MySQL中删除数据来构建索引。它非常简单,旨在解决您的确切问题。
还有一个solr,这是一个围绕lucene的http包装器,但我发现sphinx更直接一点。
答案 2 :(得分:0)
我和其他人一样,我会敦促使用Lucene,Sphinx或Solr。
但是,如果这些内容已经完成并且您的要求很简单,我已经使用了here步骤在过去的多个项目中构建简单搜索功能。
该链接适用于Symfony / PHP,但您可以将概念应用于任何语言和应用程序结构,前提是存在可用的词干算法的实现。但是,如果您不使用数据访问模式,您可以在更新记录时挂钩以更新索引,这样做并不容易。
另外一些缺点是,如果您需要单个索引表但需要索引多个表,则必须在DAL中模拟参照完整性,或者为要索引的每个不同表添加fk列。我不确定你想要做什么,这可能完全排除它。