现在我有以下构造来查找具有相似关键字的项目:
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
字段中分隔的关键字逗号之外,我还有一个原子键表(意思是两列keyword
和object_id
,直接将一个关键字与一个项目相关联)。
是否有任何替代方案或平滑解决方案可以在不诉诸MyISAM
镜像表的情况下实现相同效果?
答案 0 :(得分:0)
首先,不要每次都创建表。您可以创建一次并使用触发器插入/更新/删除记录,或者定期(例如每小时)截断并插入记录(如果您不想使用触发器)。
或者,您可以从MySQL卸载此任务并使用Lucene / Solr或Sphinx。