这可能过于笼统或主观,但我需要帮助,而且我甚至不确定正确和简明的问题是什么。我在过去几天里做了很多谷歌搜索,试图理解这一点,我比以往更加困惑,采取何种方法。
在MySQL中,我为产品目录构建了一个数据库。我必须跟踪一些多对多关系,例如产品标签,产品类别,所以我决定在这些表中使用INNODB
,以便我可以使用{{约束。这一切都很好,但是。 FOREIGN KEY
不支持INNODB
。我已经读过在FULLTEXT
子句中使用LIKE '%WORD%'
是不好的,因为当通配符添加搜索词时,不能使用索引。数据库可能会在某些时候有很多条目,我不希望搜索永远占用。
那么一个人怎么吃蛋糕呢?我需要选择其中一个:WHERE
还是FULLTEXT
?我应该制作一种只包含大多数搜索相关列的汇总FOREIGN KEY
表,并在INNODB表上使用触发器来保持更新吗?不会 - 至少部分地 - 首先击败使用MYISAM
约束的奖励:消除重复和多余的数据?搜索大型数据库的最佳模式是以最佳性能运行 - 至少在使用FOREIGN KEY
与INNODB
时是什么?
如果有光明和有经验的人至少能指出我正确的方向,我将不胜感激。提前谢谢。
答案 0 :(得分:5)
我去年做了一次网络研讨会演示Full Text Search Throwdown来比较不同的全文搜索工具,包括MyISAM FULLTEXT索引,MySQL 5.6中InnoDB FULLTEXT索引的新实现。您还可以在Slideshare上找到我的幻灯片:Full Text Search Throwdown。
为了表现,Sphinx Search是明显的赢家。我咨询的大多数网站都使用InnoDB来存储他们的规范数据,并使用Sphinx Search来存储相同数据的辅助索引。然后,您将获得两全其美:InnoDB的数据完整性和Sphinx搜索的速度。
Sphinx Search的缺点是很难以递增的方式向给定的Sphinx Search索引添加更多内容。向索引添加单行所需的工作量与重新索引整个集合的工作量相同。这有几种解决方法。
InnoDB FTS相当新,它有一些奇怪的怪癖。您可能希望我的同事在Percona阅读深入的评论:
PS:不要使用MyISAM。 : - )
答案 1 :(得分:3)
不要将MySQL
用于基于文本的搜索。它不是正确的工具。使用特殊解决方案,如Lucene
这是我1美分的意见
您可以在MySQL
中使用文本搜索,但没有任何性能预期。