Почему полнотекстовый поиск mysql все еще медленный с несколькими условиями where?

avatar
TomSawyer
1 июля 2021 в 16:32
112
0
0

У меня есть следующие запросы:

Ищет в таблице около 800 тысяч записей.

SELECT id FROM news_article
    WHERE cat_id=1 AND source_id=7
      AND crawl_date>1624947312
      AND crawl_date<1624949312
    ORDER BY score DESC,id ASC;

-> 0,05 с, со 100 строками

SELECT id,MATCH(title) AGAINST('test query') as score
    FROM news_article
    WHERE cat_id=1 AND source_id=7
      AND crawl_date>1624947312
      AND crawl_date<1624949312
      AND MATCH(title) AGAINST('test query')
    ORDER BY score DESC,id ASC LIMIT 0,1;

-> Это заняло до 5-6 секунд

Я получил индекс (cat_id, source_id, crawl_date)

Интересно, почему использование полнотекстового поиска в этом случае все еще такое медленное? Насколько я понимаю, он выполняет полнотекстовый поиск только в 100 строках, а не в записи таблицы 800 КБ из-за использования нескольких условий where?

Все равно ускорить?

Источник
mfort
1 июля 2021 в 16:40
0

Вы пытались добавить индекс к столбцам?

TomSawyer
1 июля 2021 в 16:40
0

@mfort у меня есть индекс для всех необходимых столбцов

Rick James
2 июля 2021 в 05:59
0

Это помогает? INDEX(cat_id, source_id, crawl_date)

TomSawyer
2 июля 2021 в 14:58
0

@RickJames У меня уже был этот индекс, но он ничего не ускоряет. Проблема в том, что условие полнотекстового поиска, кажется, не находит в диапазоне crawl_date, оно сканирует всю таблицу, чтобы найти

Rick James
2 июля 2021 в 16:46
0

@TomSawyer - я предлагаю вам отправить отчет об ошибке на bugs.mysql.com .

Ответы (0)