@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.

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

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

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

Похожие вопросы