这种情况是否需要InnoDB或MyISAM?

时间:2010-07-28 18:46:50

标签: mysql innodb myisam

我正在搜索一个表(少数内连接),最多运行5秒(750万行)。这是一个MyISAM表,我没有对它使用全文索引,因为我发现在使用MATCH AGAINST和正常的“喜欢”语句时我的速度没有区别。

我现在因为锁定表和查询在完成之前运行了几分钟而“痛苦”。

尝试将引擎切换到InnoDB会对我有什么好处吗?或者这只有在我需要插入或更新行时才有用...而不仅仅是选择它们?这整个锁定的东西正忙着磨我的球......

2 个答案:

答案 0 :(得分:1)

InnoDB支持行级锁定而不是表级锁定...这样可以缓解您的问题(虽然我不确定它会完全删除它。)

您最好的选择是使用专用搜索系统(如Sphinx,Lucene或Solr)

答案 1 :(得分:0)

行级和表级锁定之间的区别仅对插入和更新查询很重要。如果你大多数都选择(因此插入/更新不会经常发生以锁定表格),差异将不会那么大(尽管在最近的基准测试中,InnoDB似乎表现优于MyISAM)。

您可以考虑的其他方法是重新组织您的数据结构,可能包括带有“标签”或“关键字”的其他查找表。按照webdestroya的建议实现更高效的全文引擎。

最后但同样重要的是,我也很惊讶你在FULL TEXT和LIKE中得到了类似的结果。如果您搜索的字段不是很宽,可能会发生这种情况,在这种情况下,使用= search的标准B-TREE索引就足够了吗?