【问题标题】:slow full-text-search in MySQLMySQL中的慢速全文搜索
【发布时间】:2011-10-16 20:40:40
【问题描述】:

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

//已编辑

架构:

id int(11) 非空, textmediumtext 整理 utf8_general_ci 不为空, 主键 (id), 全文键 text (text)

查询:

SELECT table_name.id FROM table_name WHERE MATCH (text) 反对(布尔模式下的“+关键字”)

【问题讨论】:

  • 您能在您的问题中添加查询吗?
  • 我们能看到架构吗?什么查询很慢? (旁白:大概你的意思是词短于 比4个字符?)
  • 我已经添加了架构和查询(旁白:是的,很抱歉 :))
  • 4秒时间是查询时间还是php取值时间?

标签: mysql full-text-search


【解决方案1】:

你在做什么

WHERE note LIKE '%keyword%'

?

因为如果你是,我并不惊讶它很慢。

你有两个选择。要么将其分解成单独的作品,然后将每个单词连同一个 ID 单独存储在数据库中,然后将该 ID 链接到 note_id。

或者,阅读以下内容:http://dev.mysql.com/doc/refman/5.6/en/fulltext-search.html 并将 FULLTEXT 类型的索引添加到您的数据库中。

【讨论】:

  • 我已经有了全文索引,我使用“匹配”查询
【解决方案2】:

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

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

【讨论】:

  • 谢谢,我之前读过关于狮身人面像的文章。我正在考虑在我的页面上进行即时搜索,看起来这是解决我的问题的唯一方法,而这个未来的想法是外部全文引擎。
猜你喜欢
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 2014-10-20
  • 1970-01-01
  • 1970-01-01
  • 2010-10-22
相关资源
最近更新 更多