Кэшируйте и ускоряйте решение для лайк-заявления - PullRequest
0 голосов
/ 24 января 2012

Я столкнулся с MySql-запросом, который требует слишком много ресурсов процессора и времени для выполнения

Запрос выглядит как

Выберите * из таблицы, где table.a LIKE% a% OR table.a LIKE% b% OR table.a LIKE% c%

Нам нужны эти НРАВИТСЯ заявления из-за требований бизнеса (нам нужно искать какие-либо равенства).

Так как это можно ускорить? Есть ли какие-нибудь кеши, которые мы могли бы использовать? Есть ли некоторые решения NoSql было бы хорошо? Я полагаю, что даже если мы загрузим всю таблицу в память, мы все равно будем иметь низкую производительность из-за полнотекстового сканирования из-за этих LIKE.

Будет ли лучше, если мы будем использовать регулярное выражение там? Какие подходы обычно хороши для таких целей текстового поиска? Если мы перейдем на NoSql, будет ли лучше? Какой конкретный продукт может нам помочь?

1 Ответ

1 голос
/ 24 января 2012

Проблема в том, что поиск с подстановочными символами не может очень эффективно использовать индексы, поэтому у вас проблемы с производительностью.RegEx будет не лучше, на самом деле, вероятно, будет еще хуже.

Я бы предложил установить полнотекстовый индекс в этом поле, если причина, по которой вы используете символы подстановки, состоит в том, чтобы выбрать индивидуальныйслова из текстового поля.Это позволит вам выполнять поиск без подстановочных знаков для отдельных слов.Тем не менее, это не очень поможет, если вы ищете части слов, такие как ваш пример% b%.

Переключение на NoSQL из-за того, что несколько запросов выполняются плохо, кажется чрезмерным излишним, и я сомневаюсь, что этого достаточно, чтобы оправдать его только по этой причине.

...