在MySQL中慢速全文搜索

时间:2011-07-31 10:24:34

标签: mysql full-text-search

我的表包含带有简单模式的+ 800k记录(仅id [int]和note [text]上的全文索引)。每次我插入新记录时,我都会使用php脚本来删除所有短于4个字符的字符串和所有停止字。比处理过的字符串插入DB中。当我搜索一些常用关键字时,需要+ 4s才能获得结果,整个数据库在搜索过程中卡住了。我做错了什么?

//编辑

架构:

id int(11) NOT NULL,
text mediumtext COLLATE utf8_general_ci NOT NULL,
PRIMARY KEY (id),
FULLTEXT KEY text (text)

查询:

SELECT table_name.id FROM table_name WHERE MATCH (text) AGAINST ("+keyword" IN BOOLEAN MODE)

2 个答案:

答案 0 :(得分:0)

你在做什么

WHERE note LIKE '%keyword%'

因为如果你是,我并不感到惊讶,这很慢。

你有两个选择。将其分解为单独的工作,并将每个单词自身存储在数据库中,同时存储一个ID,然后将该ID链接到note_id。

或者,请阅读:http://dev.mysql.com/doc/refman/5.6/en/fulltext-search.html并在数据库中添加FULLTEXT类型的索引。

答案 1 :(得分:0)

在处理大型数据集时,已知MyISAM全文搜索效率很低[1]。在MySQL 5.6中的InnoDBs全文搜索可能是解决方案,但现在最好的可能是使用外部全文引擎,如Sphinx或Lucene / Solr,如果你可以在服务器上安装新软件。

[1] http://www.mysqlperformanceblog.com/files/presentations/EuroOSCON2006-High-Performance-FullText-Search.pdf