Добрый вечер.
Есть таблица порядка 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.
Сделать миллион индексов на все возможные комбинации - явно ещё менее правильно.
Какие ещё могут быть варианты?