@runapa

Как ускорить запрос Select живом поиске?

Делаю поиск по title при помощи %like%. Но запрос выполняется очень долго - иногда не менее 10 секунд, в таблице 360k записей. Количество найденых результатов ограничено 10. Индекс на title стоит.
Можно ещё как нибудь ускорить?
  • Вопрос задан
  • 176 просмотров
Решения вопроса 2
ipatiev
@ipatiev
Потомок старинного рода Ипатьевых-Колотитьевых
Если поисковый запрос начинается с символа %, то индекс толком не используется.
Вам нужен либо fulltext index и соответствующий запрос, либо сторонний поисковый движок типа эластика или мантикоры

Или хотя бы перенести сайт с того утюга, на котором он хостится сейчас, на нормальный сервер. Потому что 10 секунд на перебор трех сотен тысяч строк - это запредельные какие-то цифры.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Select title from table where title Like % : title % limit 10


runapa, есть разные пути как ускорить текстовый поиск. Человек в ответах верно написал что если
ты включаешь лидирующий знак % то индекс не используется. Это правда. Классические индексы БД
не умеют искать по середине выражения. Только по префиксу или по полному совпадению. Если сработает
- попробуй переписать вот так.

Select title from table where title Like : title % limit 10


Если в поле title - ты постоянно ишешь какую-то категорию - то можно эту категорию выделить
в отдельное поле и проиндексировать его и сделать его лидирующем в плане запроса.
Тогда поиск будет выглядеть так.

Select title from table where category='физ-лицо' AND 'title Like %: title % limit 10

и фактическое время запроса будет уменьшено. Но это требует эксперимента.

Если это все не помогло - то тогда почитай как в MySQL работает полнотекстовый поиск
https://dev.mysql.com/doc/refman/8.0/en/fulltext-n... Это возможно потребует
переделки всей таблицы. И переделки всех запросов.
Не всем это подходит и не всегда оптимально. Поэтому делай эксперименты с замером времени.
Текстовые индексы имеют побочные свойства. Они либо медленнее обновляются (неконсистентны)
в отличие от B+Tree либо требуют ручных действий по обновлению.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы