MySQL Полнотекстовый поиск: почему MATCH AGAINST не использует табличные индексы - PullRequest
1 голос
/ 04 марта 2020

Я экспериментирую с MySQL полнотекстовым поиском и столкнулся с чем-то, что не могу понять.

При написании стандартного запроса для поиска статьи с определенным языком и данным словом (например, Трамп) в содержании статьи я бы написал что-то вроде:

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

Здесь MySQL использует индекс на language_id, чтобы сузить его, а затем проходит через внутреннее выделение и выполняет предложение LIKE

. Это происходит довольно быстро, поскольку есть только ~ 400 статей (из 900 КБ), которые имеют 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?

1 Ответ

0 голосов
/ 04 марта 2020

Я не понимаю, почему это сработает, но вы пытались использовать join вместо внутреннего выбора? Это имеет значение?

...