2017-01-06 4 views
0

У меня проблемы с LIKE Оператор. Я создаю запрос которого ищет с как-то, например, я ищу улицу 34:Mysql multiple LIKE with "AND"

WHERE address LIKE '%Street%' AND address LIKE '%34%' 

Проблема заключается в том, что если я пишу слишком длинный адрес MySQL запрос замедляет бесконтрольное вниз. Возможно ли быстрое решение? Я знаю, что есть операторы REGEXP или IN, но они ищут с помощью OR, но мне нужно найти BY AND.

ps: Почему я пишу несколько LIKE? Потому что некоторые могут сообщать не «Улица 34», а «34-стрит».

+1

Ваша таблица правильно проиндексирована? –

+1

Я проиндексировал в BTREE то же самое, я проиндексировал FULLTEXT, тогда его поиск был только словами, но в моем случае лучше было бы искать после каждой буквы. Минимальные буквы начинаются с 3 –

+0

Если операнд LIKE начинается с **% ** MySql cant, используйте INDEX. поэтому ваш запрос является ** ПОЛНЫМ ТАБЛИЦЫ СКАНИРОВАНИЯ ** и посмотреть, что написал @Romans Leonovs –

ответ

0

Добавить таблицу поиска, в которой у вас есть поле id и varchar.

Вставьте в него каждое уникальное индивидуальное слово.

Сделайте ссылку, которая связывает слова с их адресами.

Таблица адресов

Id address 
1 34 bakersfield 
2 steve irwing street 34 

Таблица слов

Id word 
    1 34 
    2 bakersfield 
    3 steve 
    4 Irwing 
    5 Street 

Связывание таблицы

Street_id word_id 
    1.    1 
    1.    2 
    2.    3 
    2.    4 
    2.    5 
    2.    1 

Тогда все, что вам нужно сделать, это где и присоединяется.

Вы также можете использовать, где в запросах.

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

0

LIKE "%term%" не может извлечь выгоду из индекса, и это означает, что вы подвергли свою базу данных полной проверке таблицы. Как вы заметили, это довольно медленно.

Вы ознакомились с полнотекстовым поиском MySQL? Это значительно ускорит работу, если вы используете движок myisam: http://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html.

+0

Да, я уже проверил полнотекстовую индексацию. Его работы быстрее, но в том же самом поиске адреса. У меня есть база данных со многими адресами, и моя точка - это система, в которой пользователь может искать адрес.О проблеме полного контекста клиент может не знать полностью какое-либо имя адреса, например, он пишет название города Карс, но он не знает, как закончить его. и там многие переменные, такие как hes, будут писать уличную улицу и город, но строка базы данных сохранит ее как улицу улицы города nr. Я пытаюсь сделать поиск, как google, принимая smt выше –