我的表包含带有简单模式的+ 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 KEYtext
(text
)
查询:
SELECTtable_name
.id
FROMtable_name
WHERE MATCH (text
) AGAINST ("+keyword" IN BOOLEAN MODE)
答案 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,如果你可以在服务器上安装新软件。