Как улучшить производительность в "как"% variable% "? - PullRequest
1 голос
/ 20 июня 2011

У меня есть этот запрос в MySQL:

select *
from alias where
name like '%jandro%';

Какие результаты:

Jandro, Alejandro

Индекс по имени не может быть применен к более высокой производительности, потому что это фильтр диапазона. Есть ли способ улучшить производительность запросов?

Я пытался использовать полнотекстовый индекс , но он работает только для полных слов.

Я также пытался использовать таблицу MEMORY ENGINE , и это быстрее, но я бы хотел лучший выбор.

РЕДАКТИРОВАТЬ
Я думаю, что мне придется просто принять это сейчас:

select *
from alias where match(name) against ('jandro*' in boolean mode);

1 Ответ

2 голосов
/ 21 июня 2011

Я делал это в прошлом (не в MySQL, а до того, как полнотекстовый поиск стал общедоступным на серверах баз данных), создав таблицу подстановки, в которой я создал все подстроку с левым разделением для поиска.

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

Он работал с триггерами при вставке, обновлении и удалении.

В переводе на ваш пример:

Псевдоним таблицы

ID          name
1           Jandro
2           Alejandro

Таблица name_lookup

alias_id          name_substring
1                 Jandro
1                 andro
1                 ndro
1                 dro
1                 ro
2                 Alejandro
2                 lejandro
2                 ejandro
2                 jandro
2                 andro
2                 ndro
2                 dro
2                 ro

Ваш запрос становится

select alias_id, name
from alias a, 
     name_lookup nl
where a.id = ni.alias_id
and   ni.name_substring like 'andro%'

Таким образом, вы попадаете в индекс таблицы name_substring.

Это стоит делать только для обычных запросов к огромным наборам данных - но это работает, и это быстро.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...