Mysql 搜索性能和数据完整性的最佳实践(或最佳引擎)

Mysql 搜索性能和数据完整性的最佳实践(或最佳引擎),mysql,Mysql,这可能是一个过于笼统或主观的问题,但我需要帮助,我甚至不知道什么是正确和简洁的问题。在过去的几天里,我做了很多谷歌搜索,试图弄明白这一点,我比以往任何时候都更困惑于该采取什么样的方法 在MySQL中,我为产品目录构建了一个数据库。我必须跟踪一些多对多关系,例如产品标签、产品类别,因此我决定需要在这些表中使用INNODB,以便我可以使用外键约束。没关系,但是INNODB不支持全文。我已经读到,在WHERE子句中使用如“%WORD%”,性能很差,因为在搜索词前面加通配符时不能使用索引。数据库在某个时

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

在MySQL中,我为产品目录构建了一个数据库。我必须跟踪一些多对多关系,例如产品标签、产品类别,因此我决定需要在这些表中使用
INNODB
,以便我可以使用
外键
约束。没关系,但是<代码>INNODB不支持
全文
。我已经读到,在
WHERE
子句中使用
如“%WORD%”
,性能很差,因为在搜索词前面加通配符时不能使用索引。数据库在某个时候可能会有很多条目,我不希望搜索花费很长时间

那么,一个人如何既吃蛋糕又吃蛋糕呢?我需要选择一个还是另一个:
全文
外键
?我是否应该制作一种摘要
MYISAM
表,只包含与搜索最相关的列,并在INNODB表上使用触发器保持更新?这难道不会——至少部分地——首先挫败使用
外键的好处吗:消除重复和多余的数据?让搜索大型数据库以尽可能最佳的性能工作的最佳模式是什么?至少在使用
INNODB
MYISAM
方面是这样的


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

不要使用MySQL进行基于文本的搜索。这不是正确的工具。使用特殊的解决方案解决这类问题。
这是我价值1美分的意见。

您可以在
MySQL
中使用文本搜索,但没有任何性能要求。

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

就表现而言,他显然是赢家。我咨询过的大多数站点都使用InnoDB存储其规范数据,并使用Sphinx搜索存储相同数据的辅助索引。然后,您将获得两个方面的最佳效果:InnoDB的数据完整性和Sphinx搜索的速度

Sphinx搜索的缺点是很难以增量方式向给定的Sphinx搜索索引添加更多内容。向索引中添加一行所需的工作量大约相当于为整个集合重新编制索引所需的工作量。对此,有两种变通方法

InnoDB FTS是非常新的,它有一些奇怪的特性。您可能想阅读我在Percona的同事的一篇深入评论:


注意:不要使用MyISAM.:-)

InnoDB从v5.6开始支持
FULLTEXT
。本演示文稿提供了一些关于postgresql中全文搜索的有趣信息(编辑:Bill Karwin在我发布此内容几秒钟后自己回答了。Doh!:-)感谢您的回答。这听起来很有希望。我现在在读斯芬克斯。我还没有听说过InnoDB全文版,我也来看看。