2015-05-11 2 views
0

Я использую MySQL 5.5.37. У меня есть таблица с колонкойМогу ли я создать индекс MySQL для поиска LIKE с помощью левых и правых подстановочных знаков?

`NAME` varchar(100) COLLATE utf8_bin NOT NULL 

, и я намерен частичный поиск по колонке имя как

select * FROM organnization where name like ‘%abc%’ 

Обратите внимание, что я хочу, чтобы найти, что строка «ABC» произойти в любом месте, не обязательно в начале. Учитывая это, есть ли какой-либо индекс, который я могу использовать в столбце для оптимизации выполнения запроса?

+0

Нет, это невозможно. Может, вам нужен полнотекстовый индекс? – Barmar

+0

Я смущен - вы говорите, что это невозможно, и тогда вы предлагаете способ, которым это возможно? Не могли бы вы дать ответ на примере того, как это возможно? –

+0

полнотекстовые индексы могут соответствовать словам, а не случайным строкам. – Barmar

ответ

0

Если вы ожидаете только нескольких подходящих результатов, вы можете создать индекс в столбце имен, чтобы ускорить запросы с помощью первичного ключа.

Если ваша таблица имеет первичный ключ, как

org_ID Int не нулевой auto_increment первичный ключ, имя VARCHAR (100) СОРТ utf8_bin NOT NULL, убывание VARCHAR (200) СОРТ utf8_bin NOT NULL, размер INT, ....

вы можете создать индекс (имя, org_ID)

и сделать ваш запрос, как это:

select * from orgnizations o1 join (select org_id from orgnizations where name like '%abcd%') o2 using (org_id) 

должен быть быстрее, чем ваш первоначальный запрос

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

select org_id, name, size from orgnizations where name like '%abcd%' 

будет все еще намного быстрее, чем полное сканирование таблицы

+0

У меня нет ожиданий по количеству результатов. Их могло быть немного, но их могло быть много. –

+0

Пока ваш поиск% abcd% возвращает относительно небольшой набор данных, вы должны выполнить сканирование индекса вместо сканирования таблицы. Реальный порог зависит от ваших данных, но если вы ожидаете, что большинство поисковых запросов будет соответствовать менее 10% записей, сканирование индекса может оказаться полезным. Но он не идеален и может занять некоторое время.Если вы хотите найти несколько миллионов записей в подзаголовках, вам может понадобиться создать индекс, используя таблицу ключевых слов, похожую на полнотекстовую индексацию. – Tim3880