mysql like% query медленный с полнотекстовым индексом - PullRequest
10 голосов
/ 14 июля 2011

Я использую простой запрос mysql LIKE, подобный этому:
SELECT * FROM myTable WHERE field LIKE 'aaa%' ORDER BY field2

У меня есть полнотекстовый индекс по «полю», и все же он очень медленный. Я понял, что есть возможность использовать матч. В чем разница? Как? Каков наилучший подход для моего использования? Обратите внимание, что я использую «%» для всего, что начинается с «aaa»

UPDATE: В итоге я использовал что-то вроде этого: SELECT<br> *, MATCH (name) AGAINST ('a*' IN BOOLEAN MODE) AS SCORE<br> FROM<br> users WHERE<br> MATCH (name) AGAINST ('a*' IN BOOLEAN MODE)<br> ORDER BY SCORE, popularity DESC LIMIT 4

Одна вещь, которую я хотел бы изменить, это не из-за порядка сначала по SCORE, а затем по популярности моего поля, а вместо этого по простой функции веса, что-то вроде 0,5 * SCORE + 0,5 * популярности. Как?

1 Ответ

10 голосов
/ 14 июля 2011

LIKE не использует полнотекстовый индекс.Чтобы использовать полнотекстовый индекс, вы должны использовать соответствие (как вы сказали):

SELECT * 
FROM myTable 
WHERE MATCH(field) AGAINST ('aaa*' IN BOOLEAN MODE)
ORDER BY field2

Руководство по MySQL имеет обширную главу по функциям полнотекстового поиска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...