Таблица:users
с full text search
индекс на колонке username
.Поиск по всему тексту поиска по релевантности
Запрос:
SELECT
MATCH (username) AGAINST ('shaharyar' IN NATURAL LANGUAGE MODE) AS `score`,
uid,
first_name,
username,
`status`,
created
FROM users
WHERE
MATCH (username) AGAINST ('shaharyar' IN NATURAL LANGUAGE MODE) AND
uid <> 164125 -- to prevent self profile search
ORDER BY
score DESC,
created DESC
Вопрос: Будет ли пункт Match
выполнить в 2 раза?
Я знаю, что MySQL сортирует по score
по убыванию по умолчанию, но здесь мне нужно условие двойной сортировки, поэтому я выбираю столбец.
Поясните Extended:
+----+-------------+-------+----------+------------------+----------+---------+-----+------+----------+-----------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+----------+------------------+----------+---------+-----+------+----------+-----------------------------+
| 1 | SIMPLE | users | fulltext | PRIMARY,username | username | 0 | | 1 | 100 | Using where; Using filesort |
+----+-------------+-------+----------+------------------+----------+---------+-----+------+----------+-----------------------------+
О 150K + записи в таблице.
К сожалению, ваш запрос не использует индекс * (проверено с объяснением) *. Сканирование строк 86K +. Я думаю, его причина в том, что условие не в WHERE, а после предложения. – Shaharyar