Если вы хотите актуальность, а также результаты должны быть отсортированы по релевантности общий формат запроса FULLTEXT является:Альтернативный синтаксис MySQL полнотекстовый поиск
SELECT name, MATCH(name) AGAINST('Bob') AS relevance FROM users WHERE MATCH(name) AGAINST('Bob')
Как разработчик, я всегда хотел, чтобы мой код СУХОЙ (не повторяйся). Есть ли какая-либо причина не писать запрос как:
SELECT name, MATCH(name) AGAINST('Bob') AS relevance FROM users HAVING relevance > 0 ORDER BY relevance DESC
Это, кажется, возвращает те же результаты, но я должен беспокоиться о ORDER BY вызывает запрос медленнее? Эти запросы эквивалентны?
Задание MATCH()
дважды не снижает производительность, как указано в руководстве по MySQL.
Natural Language Full-Text Searches
Для достижения этого результата, вы должны указать
MATCH()
дважды: один раз вSELECT
список и один раз в статье оWHERE
. Это не приводит к дополнительным служебным данным, поскольку оптимизатор MySQL замечает, что два вызоваMATCH()
равны и вызывает полный текстовый код поиска только один раз.
Я пробовал использовать релевантность WHERE> 0, но затем я получил эту ошибку. Неизвестный столбец «релевантность» в разделе «where» – ejunker
True. Предложение WHERE вычисляется * перед выражением SELECT, поэтому оно не может использовать какие-либо псевдонимы для этих выражений. Предложение HAVING выполняется после, поэтому оно может использовать эти псевдонимы; однако только предложение WHERE позволяет MySQL оптимизировать ненужные вычисления. В этом случае, СУХОЙ или скорость: возьмите свой выбор. – eswald