4

这可能是一个过于笼统或主观的问题,但我需要帮助,我什至不确定正确和简洁的问题是什么。在过去的几天里,我做了很多谷歌搜索,试图理解这一点,但我比以往任何时候都更加困惑要采取什么方法。

在 MySQL 中,我为产品目录构建了一个数据库。我必须跟踪一些多对多关系,例如产品标签、产品类别,所以我决定需要INNODB在这些表中使用,以便我可以利用FOREIGN KEY约束。没关系,但是。INNODB不支持FULLTEXT。我读过使用LIKE '%WORD%'inWHERE子句的性能很差,因为当通配符在搜索词前面时不能使用索引。数据库在某个时候可能会有很多条目,我不希望搜索永远进行。

那么,一个人如何拥有他们的蛋糕并同时吃掉它呢?我需要选择一个或另一个:FULLTEXTFOREIGN KEY?我是否应该制作一种MYISAM只包含最相关的搜索列的汇总表,并在 INNODB 表上使用触发器来保持更新?这会不会——至少部分地——FOREIGN KEY首先破坏使用约束的好处:消除重复和多余的数据?以最佳性能搜索大型数据库的最佳模式是什么 - 至少在使用INNODBvs.方面MYISAM

如果有聪明有经验的人至少可以为我指明正确的方向,我将不胜感激。提前致谢。

4

2 回答 2

5

去年我做了一个网络研讨会演讲全文搜索 Throwdown来比较不同的全文搜索工具,包括 MyISAM FULLTEXT 索引,MySQL 5.6 中 InnoDB FULLTEXT 索引的新实现。您还可以在 Slideshare:全文搜索Throwdown上找到我的幻灯片。

就性能而言,Sphinx Search 无疑是赢家。我咨询过的大多数网站都使用 InnoDB 来存储他们的规范数据,并使用 Sphinx Search 来存储相同数据的辅助索引。然后您将获得两全其美:InnoDB 的数据完整性和 Sphinx Search 的速度。

Sphinx Search 的缺点是很难逐步向给定的 Sphinx Search 索引添加更多内容。将单行添加到索引所需的工作与重新索引整个集合一样多。有几个解决方法。

InnoDB FTS 是相当新的,它有一些奇怪的怪癖。您可能想阅读我在 Percona 的同事的深入评论:

PS:不要使用 MyISAM。:-)

于 2013-06-12T21:48:36.893 回答
3

不要MySQL用于基于文本的搜索。它不是正确的工具。为此使用特殊的解决方案,例如Lucene
这是我的 1 美分意见。
您可以使用文本搜索,MySQL但没有任何性能期望。

于 2013-06-12T21:41:19.190 回答