最佳实践(或最佳引擎)以提高搜索性能和数据完整性。

4
这可能是一个过于笼统或主观的问题,但我需要帮助,而且我甚至不确定正确和简明的问题是什么。过去几天我做了很多谷歌搜索试图理解这个问题,但我比以前更加困惑,不知道该采取什么方法。
在MySQL中,我已经为产品目录建立了一个数据库。我必须跟踪一些多对多关系,例如产品-标签、产品-类别,所以我决定在这些表中需要使用INNODB,以便我可以利用FOREIGN KEY约束。这都很好,BUT。INNODB不支持FULLTEXT。我读到说在WHERE子句中使用LIKE'%WORD%'会影响性能,因为当通配符前置搜索词时,无法使用索引。数据库在某些时候可能会有很多条目,我不想花费太长时间来搜索。
那么如何两全其美呢?我需要选择其中之一:FULLTEXT还是FOREIGN KEY?我应该制作一种摘要MYISAM表,只包含最相关的搜索列,并在INNODB表上使用触发器来保持更新吗?这难道不会至少部分破坏使用FOREIGN KEY约束的奖励吗:消除重复和多余数据?使用INNODB与MYISAM相比,使大型数据库搜索的最佳性能模式是什么?
如果有经验且聪明的人至少能指点我正确的方向,我将不胜感激。提前致谢。

3
自 v5.6 版本起,InnoDB 支持 FULLTEXT - eggyal
这个演示文稿包含了一些关于PostgreSQL全文搜索的有趣信息。http://www.slideshare.net/billkarwin/full-text-search-in-postgresql(编辑:Bill Karwin在我发布后仅几秒钟就回答了。唉! :-)) - Marcello Romani
2个回答

5

去年我做了一个网络研讨会 全文搜索对决,比较了不同的全文搜索工具,包括MyISAM FULLTEXT索引、MySQL 5.6中InnoDB FULLTEXT索引的新实现。你也可以在Slideshare上找到我的演示文稿:全文搜索对决

就性能而言,Sphinx Search是明显的赢家。我咨询过的大多数网站都使用InnoDB存储它们的规范数据,并使用Sphinx Search存储相同数据的辅助索引。这样,你就可以同时获得InnoDB的数据完整性和Sphinx Search的速度。

Sphinx Search的缺点是很难逐步向给定的Sphinx Search索引添加更多内容。向索引中添加一行数据需要的工作量与重新索引整个集合的工作量相当。有几种解决方法可供选择。

InnoDB全文检索比较新,而且有一些奇怪的缺陷。您可能想阅读Percona同事撰写的深度评估:

附言:不要使用MyISAM。 :-)


谢谢你的答复。听起来很有前途。我现在正在学习Sphinx。我之前没听说过InnoDB全文搜索,我也会去看看它。 - user1433150

3

不要使用MySQL进行基于文本的搜索,它不是正确的工具。使用像Lucene这样的特殊解决方案。
这只是我的一分见解。
你可以使用MySQL中的文本搜索,但不要有任何性能期望。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接