Когда я изменяю порядок ключевых слов в булевом поиске, я получаю тот же результат, но очень разные результаты.Каковы правила для заказа ключевых слов в буловом поиске MySQL?
Профилирование на MySQL 5.6.33 с MyISAM таблицы, ft_min_word_len=2
и description_index
как FULLTEXT
индекс на title
и description
возвращает это:
# Query 1
SELECT id
FROM archive, topic
WHERE topic.type=0 AND archive.status=2
AND MATCH(title, description) AGAINST ('+house* +tz*' IN BOOLEAN MODE)
AND archive.topicId = topic.id
ORDER BY archive.featured DESC, archive.submissionDate DESC LIMIT 0,20
Результат:
Total count: 12
Key_read_requests: 2384607
Creating sort index: 7.950430 sec (!)
Duration: 8.851252 sec
# Query 2
SELECT id
FROM archive, topic
WHERE topic.type=0 AND archive.status=2
AND MATCH(title, description) AGAINST ('+tz* +house*' IN BOOLEAN MODE)
AND archive.topicId = topic.id
ORDER BY archive.featured DESC, archive.submissionDate DESC LIMIT 0,20
Результат:
Total count: 12
Key_read_requests: 415
Creating sort index: 0.003449
Duration: 0.004054 sec
Всего записей в ключевое слово:
tz*: 135092
tz: 25596
house*: 12
Объяснить одинакова для обоих запросов:
id | select_type | Table | Type | Key | Key len | Ref | Rows | Extra
1 | SIMPLE | archive | fulltext | description_index | 0 | | 1 | Using where; Using filesort
1 | SIMPLE | topic | eq_ref | PRIMARY | 3 | archive.topicId | 1 | Using where
Только Key_read_requests
и Creating sort index
различаются между 2-запросов.
Кажется, что:
- порядок порядка ключевых слов является критическим фактором
- производительности ключевые слова используются в обратном порядке
- , имеющий самые взыскательные ключевое слово в конце повышает производительность.
Вопросы:
- Что является причиной этой большой разницы в производительности?
- Каковы правила/рекомендации? (Я не мог найти ничего в документации mysql).
MyISAM уходит; посмотрите, что вы получаете с вариантом InnoDB FULLTEXT. –
@RickJames MyISAM все еще лучше в некоторых ситуациях (наш случай). Мы ждем mysql 8, который, кажется, обладает отличными innodb perfs. До тех пор нам нужно исправить и понять эту проблему. :) https: //www.percona.com/blog/2016/10/11/mysql-8-0-end-myisam/ – Toto
Можете ли вы отправить вывод 'EXPLAIN' для обоих запросов? – Stoleg