【问题标题】:MySQL Full Text Search: Why does MATCH AGAINST not utilize table indexesMySQL 全文搜索:为什么 MATCH AGAINST 不使用表索引
【发布时间】:2020-03-04 12:34:29
【问题描述】:

我正在尝试使用 MySQL 全文搜索,但遇到了一些我无法理解的问题。

在编写用于查找具有某种语言的文章的标准查询时 并且给定的词(例如特朗普)在文章的内容中我会写如下:

SELECT * 
FROM (select * from article WHERE language_id = 2) AS A 
WHERE content like '%Trump%';

这里 MySQL 利用language_id 上的索引来缩小 它向下,然后通过内部选择并执行 LIKE 子句

这进展很快,因为只有约 400 篇文章(总共 900K)的 language_id 为 2。

但是,当我尝试对 MATCH AGAINST 子句执行相同操作时,它的运行速度要慢得多:

SELECT *
from (select * from article  WHERE language_id = 2) as A
where MATCH(content) AGAINST ('Trump');

这是为什么? MySQL 在全文搜索时是否没有使用 language_id 上的索引?鉴于我只想在具有language_id = 2 的数据库子集中搜索,有什么方法可以加快查询速度?

【问题讨论】:

    标签: mysql full-text-search


    【解决方案1】:

    我不明白为什么会这样,但是您是否尝试使用 join 而不是内部选择?这有什么区别吗?

    【讨论】:

    • 我们尝试进行连接而不是内部选择。不幸的是,这仍然导致查询比使用 like 子句慢
    猜你喜欢
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多