我正在尝试MySQL全文搜索,遇到了一些我无法理解的事情。
[编写标准查询以查找具有特定语言的文章时文章的内容中有一个给定的词(例如Trump),我会写类似:
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
的数据库子集中进行搜索,有什么方法可以加快查询速度?
我不知道为什么会这样,但是您是否尝试使用join
而不是内部选择?这有什么区别吗?