Jer*_*oyd 3 mysql performance optimization full-text-search
我在表上有一个articles
列的全文索引content
,title
并且keywords
在对每一列进行搜索时,像这样select count(1) from articles where match(content,title,keywords) against ('cats' in boolean mode)
,结果需要 12 到 15 秒。
但是单独处理这些列 ( select count(1) from articles where match(content) against ('cats' in boolean mode)
) 通常需要不到 50 毫秒。
为什么搜索 3 列的时间比单独搜索所有列的时间长 100 多倍?
这不是如何让它更快的问题,而是更多地问“为什么这么慢?”
表/索引
id int(30) PK auto_increment
url varchar(1024)
title varchar(255) FULLTEXT
content text FULLTEXT
keywords varchar(1024) FULLTEXT
comments text
created_date int(11)
posted_date int(11)
Run Code Online (Sandbox Code Playgroud)
说明
第一个是多列查询:
第二个是新的更快的查询,它分别运行 3 列然后合并它们(查询缓存已清除)。
全文列顺序
使用/强制索引与解释
从您问题中的帖子中,我看到 3 个 FULLTEXT 索引。每列有一个。
为什么查询有效?MySQL 可以使用它所拥有的任何东西。在您的情况下,它通过全表扫描进行搜索。这就是 MySQL 查询优化器决定的。
您真正需要的是一个包含所有 3 列的 FULLTEXT 索引
ALTER TABLE articles ADD FULLTEXT content_title_keywords_ndx (content,title,keywords);
Run Code Online (Sandbox Code Playgroud)
只有这样你才能说
match(content,title,keywords) against ('cats' in boolean mode)
Run Code Online (Sandbox Code Playgroud)
我之前建议制作复合 FULLTEXT 索引
Mar 16, 2012
:加快跨多列的搜索Oct 13, 2012
:下划线可以在没有全文解析器插件的情况下强制作为分词器吗?