У меня есть всеобъемлющий план для вас, чтобы максимально оптимизировать MySQL для индексации FULLTEXT
Первое, что вы должны сделать: Избавиться от списка стоп-слов
Это раздражало некоторых людей на протяжении многих лет из-за того, что они не знали, что более 600 слов исключены из индекса FULLTEXT .
Вот табличное представление этих стоп-слов .
Есть два способа обойти это
Вариант обхода 1) Создать собственный список стоп-слов.
На самом деле вы можете отправить в mysql список предпочитаемых стоп-слов.Вот значение по умолчанию:
mysql> show variables like 'ft%';
+--------------------------+----------------+
| Variable_name | Value |
+--------------------------+----------------+
| ft_boolean_syntax | + -><()~*:""&| |
| ft_max_word_len | 84 |
| ft_min_word_len | 4 |
| ft_query_expansion_limit | 20 |
| ft_stopword_file | (built-in) |
+--------------------------+----------------+
5 rows in set (0.00 sec)
ОК, не давайте создавать наш список стоп-слов.Я обычно устанавливаю английские статьи в качестве единственных стоп-слов.
echo "a" > /var/lib/mysql/stopwords.txt
echo "an" >> /var/lib/mysql/stopwords.txt
echo "the" >> /var/lib/mysql/stopwords.txt
Затем добавьте параметр в /etc/my.cnf плюс добавьте одно-, двухбуквенные и трехбуквенные слова
[mysqld]
ft_min_word_len=1
ft_stopword_file=/var/lib/mysql/stopwords.txt
Наконец, перезапустите mysql
service mysql restart
Если у вас уже есть какие-либо таблицы с индексами FULLTEXT, вы должны отбросить эти индексы FULLTEXT и создать их заново.
Пропустить вариант 2) Перекомпилируйте исходный код
Имя файла: storage / myisam / ft_static.c.Просто измените структуру C, которая содержит более 600 слов, чтобы она была пустой.Получайте удовольствие от перекомпиляции !!!
Теперь, когда конфигурация FULLTEXT затвердела, рассмотрим еще один важный аспект:
Пишите правильные рефакторизованные запросы, чтобы оптимизатор запросов MySQL работал правильно!!!
То, что я сейчас упоминаю, действительно недокументировано: всякий раз, когда вы выполняете запросы, которые выполняют JOINs, а предложение WHERE содержит функцию MATCH для поиска FULLTEXT, это приводит к тому, что MySQL Query Optimizer обрабатываетзапрос, как полное сканирование таблицы, когда дело доходит до поиска столбцов, включенных в индекс FULLTEXT.Если вы планируете запросить таблицу с использованием индекса FULLTEXT, ВСЕГДА реорганизуйте свой запрос, чтобы поиск FULLTEXT возвращал только ключи в подзапросе и подключал эти ключи к основной таблице .В противном случае индекс FULLTEXT поместит оптимизатор запросов MySQL в штопор.