@Jellylike

Как правильно искать по varchar-полям?

Добрый вечер.

Есть таблица порядка 1,5 млн строк с адресами, состоящая из десятка varchar-полей:
ID - md5-хеш от адреса
FullAddress - адрес строкой
CityType - тип населенного пункта
City - название
StreetType - тип улицы
Street - название
...


Появилась необходимость делать из этой таблицы выборки по нескольким полям, например:
  • точное совпадение адреса - сейчас ищется по ID = md5( search )
  • все адреса в пределах города (where CityType=... and City=...)
  • все адреса в пределах улицы (where CityType=... and City=... and StreetType=... and Street=...)
  • хоть что-то похожее на нужный адрес (where City=... and Street=... and Building=... - только названия, без типов)
  • все населенные пункты, в которых есть такой адрес - (where CityType=... and Street=... and Building=...)


Соответственно, возникает вопрос - как это эффективно организовать?

Достаточен ли вариант просто накинуть на каждое поле индекс? Насколько я знаю, MySQL не умеет нормально работать с несколькими индексами в одном запросе - MySQL could sometimes make use of the multiple indexes.

Сделать миллион индексов на все возможные комбинации - явно ещё менее правильно.

Какие ещё могут быть варианты?
  • Вопрос задан
  • 119 просмотров
Решения вопроса 1
bitniks
@bitniks
Go/PHP/Symfony developer
Для таких задач больше подходят поисковые движки, например, Sphinx или Elasticsearch
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ermak1
@Ermak1
Web-dev
Если все записи уникальные, то почему бы не сделать один уникальный индекс на все поля?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы