2013-03-06 2 views
1

У меня есть таблица, содержащая пять миллионов адресов в виде строк. Существует пользовательский интерфейс, который позволяет вам искать по адресу, и он реализован самым простым способом - с использованием синтаксиса LIKE с подстановочными знаками на обоих концах искомой строки. Однако этот подход очень медленный (особенно когда результат поиска нужно сортировать по некоторым критериям). Я думал об использовании полнотекстового поиска, поскольку он был бы намного быстрее, но он ограничивал пользователей, и я не хочу этого, так как большинство поисковых запросов содержат только часть слова. Адреса также могут быть сокращены.Поиск адресов в таблице MySQL

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

Редактировать Ive только что прочитал, что я могу реально использовать маску в конце строки при выполнении match against полнотекстового поиска. Так что если я храню обратный адрес, возможно, я могу сделать префикс подстановочного полнотекстового поиска. Но будет ли это быстрее и сколько? Есть ли какие-то контрольные показатели? Я не мог найти его.

+0

Вы используете индексы? – fedorqui

+0

да, но все же не быстро – alexanderg

ответ

0

Возможно, вы захотите изучить Full-Text Searches. Оператор LIKE в SQL очень неэффективен, особенно если у вас много записей.

+1

ОП особо упомянул полный текст в его вопросе, и почему он боится, что он не может быть применим к его потребностям. 'LIKE' может быть чрезвычайно эффективным, но только там, где шаблон можно сопоставить с префиксом индекса. – eggyal

+0

Что он сделал; Я пропустил эту часть. Однако я не уверен, как полнотекстовый поиск ограничивает пользователя в его случае. – Javadocs

+1

Не меня. Но это, безусловно, не поможет, когда «* большинство поисковых запросов содержат только часть слова *». – eggyal

Смежные вопросы