Если вы хотите использовать функциональность MySQL для полнотекстового поиска, вы определяете полнотекстовый индекс для полей с типом VARCHAR. Поскольку строки вставляются и обновляются, mysql должен поддерживать индексы в актуальном состоянии. Мой вопрос: Когда MySQL перестраивает индекс FTS?
- A) Сразу после ВСТАВКИ или ОБНОВЛЕНИЯ, которые влияют на индекс.
- B) Когда запускается первый SELECT, для которого требуется индекс, на который недавно повлияло UPDATE или INSERT.
- C) Что-то еще.
Ненужная справочная информация : Мой опыт, кажется, считает вариант Б. Правильно ли это? Я спрашиваю, потому что у меня возникали внезапные случайные медленные запросы, которые выполняют полнотекстовый поиск, и я не знаю, почему одни медленные, а другие нет. Я догадываюсь, что запросы могут быть медленными, если они ожидают, что mysql перестроит индекс FTS, но я не знаю, так ли это работает в mysql. Пример случайного медленного запроса (обычно тот же запрос выполняется за секунду), в медленном журнале нет медленного UPDATE или INSERT:
# Query_time: 61.775612 Lock_time: 10.110924 Rows_sent: 20 Rows_examined: 222498
SELECT SQL_CALC_FOUND_ROWS id
FROM members
WHERE
AND MATCH (bio,profile_text,name) AGAINST ('building surveyor')
AND MATCH (town, postcode, country) AGAINST ('united kingdom, liverpool');
Обратите внимание на время блокировки. Я не вижу никаких других INSERT или UPDATE в медленном журнале, поэтому я не уверен, чего он ждет. Вот почему я догадался, что это может ожидать перестройки индекса FTS?