Mysql like% query медленный с полнотекстовым индексом
Я использую простой запрос mysql LIKE, например:
SELECT * FROM myTable WHERE field LIKE 'aaa%' ORDER BY field2
У меня есть полнотекстовый индекс в поле, и все же он очень медленный.
Я понял, что есть возможность использовать матч. В чем разница? Как? Каков наилучший подход для моего использования?
Заметьте, что я использую "%" для всего, что начинается с "aaa"
UPDATE:
Я в итоге использовал что-то вроде этого:
SELECT
*, MATCH (name) AGAINST ('a*' IN BOOLEAN MODE) AS SCORE
FROM
users
WHERE
MATCH (name) AGAINST ('a*' IN BOOLEAN MODE)
ORDER BY SCORE, popularity DESC LIMIT 4
Одна вещь, которую я хотел бы изменить, заключается не в том, что вы сначала заказываете SCORE, а затем по моей популярности в полете, а вместо этого заказываете простой весовой функцией, что-то вроде 0,5 * SCORE + 0.5 *. Как?
Ответы
Ответ 1
LIKE
не использует полнотекстовый индекс. Чтобы использовать полнотекстовый индекс, вы должны использовать совпадение (как вы сказали):
SELECT *
FROM myTable
WHERE MATCH(field) AGAINST ('aaa*' IN BOOLEAN MODE)
ORDER BY field2
Руководство MySQL содержит обширную главу Функции полнотекстового поиска.