2013-09-16 71 views
1

现在我有下面的结构,以找到类似的关键字项目:在InnoDB中查找含有类似关键字的项目?

CREATE TEMPORARY TABLE tmp (FULLTEXT INDEX (keywords)) ENGINE=MyISAM 
    SELECT object_id, keywords FROM object_search_de; 

SELECT object_id 
    FROM tmp 
    WHERE MATCH (keywords) AGAINST ('foo,bar') > 1.045; 

DROP TEMPORARY TABLE tmp; 

因此,根据整体记录的数量和关键字字段的平均大小,这可以得到很慢(60秒以上执行时间处理时间)。我的目标是在1秒内完成这项任务。

除了在TEXT字段中分隔的关键字逗号之外,我还有一个原子关键字表(意思是两列keywordobject_id,直接将一个关键字与一个项关联)。

是否有任何替代方案或顺利解决方案来实现相同的效果,而不诉诸于MyISAM镜像表?

+0

为什么不在'object_search_de'上有全文索引? –

+0

@GordonLinoff因为它是'InnoDB'表,'InnoDB'不支持全文。 –

+0

我刚刚发现http://stackoverflow.com/questions/1381186/fulltext-search-with-innodb?rq=1,现在我意识到'InnoDB'支持5.6版本的全文。但是,我不确定更新MySQL环境是否会破坏针对早期版本的MySQL构建的其他内容。 –

回答

0

首先,不要每次都创建表格。如果您不想使用触发器,可以创建一次并使用触发器插入/更新/删除记录或定期(例如,每小时)截断并插入记录。

或者,您可以从MySQL卸载此任务并使用Lucene/Solr或Sphinx。

相关问题