Использует ли "И заголовок <> 'MySQL'" в рассматриваемом запросе полнотекстовое индексирование? - PullRequest
1 голос
/ 18 июня 2020

Я работаю над запросом и хочу сделать его более эффективным, если это возможно.

Таблица выглядит как:

CREATE TABLE articles (
    id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    title VARCHAR(200),
    FULLTEXT (title)
) Engine=MyISAM;

Запрос, который должен быть эффективным:

SELECT * FROM articles 
WHERE 
MATCH (title)
  AGAINST ('+MySQL' IN BOOLEAN MODE)
  AND title <> 'MySQL';

У меня есть 2 вопроса относительно вышеуказанного запроса:

  1. Используется ли AND title <> 'MySQL' полнотекстовый индекс?
  2. Можем ли мы сделать его более эффективным?

Вы можете найти скрипку здесь http://www.sqlfiddle.com/#! 9/268411/2/0

1 Ответ

0 голосов
/ 18 июня 2020

Используется ли AND title <> 'MySQL' полнотекстовый индекс?

Нет.

Первый термин, MATCH...AGAINST, будет использовать полнотекстовый индекс и выбирать только те строки, в которых слово встречается в заголовке. Это заставит запрос проверять только совпадающие строки.

Затем, исследуя эти строки, второй термин будет дополнительно фильтровать строки, в которых заголовок больше, чем просто одно слово «MySQL». Заголовки по-прежнему будут содержать 'MySQL', но в них должны быть и другие слова (или, по крайней мере, некоторые другие символы).

Можем ли мы сделать его более эффективным?

Не для MySQL.

Я считаю, что оптимизатор либо выберет использование полнотекстового индекса для поиска MATCH...AGAINST, либо будет использовать индекс B-дерева для другого типа предиката, но не обоих.

Если вы хотите, чтобы он был более эффективным, вам придется проиндексировать данные с помощью какой-нибудь другой поисковой системы, например, ElasticSearch или Sphinx Search.

...