多列全文搜索速度非常慢

Jer*_*oyd 3 mysql performance optimization full-text-search

我在表上有一个articles列的全文索引contenttitle并且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 列然后合并它们(查询缓存已清除)。

在此处输入图片说明

全文列顺序

在此处输入图片说明

使用/强制索引与解释

在此处输入图片说明

Rol*_*DBA 6

问题

从您问题中的帖子中,我看到 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 索引

试一试 !!!