Да, это, вероятно, будет очень требовательным к ресурсам, но похоже, что перед отправкой запроса у вас есть бизнес-уровень.
Подумайте о том, чего вы хотите достичь, и что вы можете сделать сами, с точки зрения разбора поисковых терминов или даже предоставления пользователю отдельных полей для описания, заголовка и тегов, и соответственно составьте запрос, чтобы более точно ориентировать запрос. запрос, а не фактически сказать: «У меня есть некоторые данные, подобные этому поисковому запросу, где-то в столбцах этой таблицы».
Как только вы определились со своей бизнес-логикой (и, если приведенный выше запрос таков, чем он заканчивается, хотя я сомневаюсь в этом, то, скорее всего), тогда вам обязательно нужно выполнить запрос через план объяснения и посмотреть, где вы можете получить некоторые индексы, чтобы помочь базе данных вместе.
EDIT:
Хорошо, так как это для предложения
select matched_val, relevance from (
select description as matched_val, count(*) as relevance
from table
where description like '%hotel%'
or description like '%london%'
or description like '%lazy%'
or description like '%dog%'
group by description
union all
select title as matched_val, count(*) as relevance
from table
where title like '%hotel%'
or title like '%london%'
or title like '%lazy%'
or title like '%dog%'
group by title
union all
select tags as matched_val, count(*) as relevance
from table
where tags like '%hotel%'
or tags like '%london%'
or tags like '%lazy%'
or tags like '%dog%'
group by tags
) as a
order by a.relevance desc
LIMIT 0 , 3
по крайней мере, это означает, что вам нужно выполнить одно и то же сопоставление один раз, а не в предикате и в операторе switch, плюс оптимизатор сможет использовать индекс для описания, заголовка и тегов (который вам потребуется добавь себя) и ты должен быть в отъезде.
посмотрите, как вашему оптимизатору запросов это нравится ...