Ni55aN
@Ni55aN

На сколько оптимально искать выражение по строке в MySQL?

Вообще говоря для бота нужно хранить некое постоянно возрастающее количество шаблонов к сообщениям, по которым и искать нужный ответ.
Например, ^привет!?$; ^как дела .*$
Сперва все это помещалось в коде, но это до ужаса не гибко при возрастающем количестве сообщений, на которые бот должен уметь отвечать. Поэтому было принято решение поместить шаблоны с ответами(а вернее с инструкциями для ответа) в таблицу в MySQL, что имеет следующий вид.

Тогда по входящему сообщению находить шаблон

SELECT * FROM test WHERE 'привет' regexp reg;

на сколько это рационально с точки зрения производительности? Как MySQL подбирает шаблон по сообщения в случае индексированного поля?
  • Вопрос задан
  • 244 просмотра
Пригласить эксперта
Ответы на вопрос 2
ubernoob
@ubernoob
Имхо надо хранить в полях типа text и искать полнотекстовым поиском по нему (по varchar вроде нет полнотекстового)
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
dev.mysql.com/doc/refman/5.7/en/regexp.html

на сколько это рационально с точки зрения производительности?


поскольку индексы использоваться не будут - рационально только на очень маленьких выборках (до 1000 записей например). В вашем случае вам даже регулярки не нужны - достаточно обычного matching/like.

В идеале для подобных задач стоит использовать вещи вроде Elastic Search. У MySQL хоть и есть поддержка full-text search и весьма неплохая, но далеко не такая же как у эластики.
Ответ написан
Ваш ответ на вопрос

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

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