Справочная информация: У меня есть таблица с 5 миллионами записей адресов, которые я хотел бы найти в различных полях (имя клиента, имя контакта, почтовый индекс, город, телефон, ...), до 8 полей. Данные довольно стабильны, максимум 50 изменений в день, поэтому доступ только для чтения.
Пользователь не должен сообщать мне заранее, что он ищет, и я также хочу поддержку комбинированного поиска (AND-конкатенация поисковых терминов). Например, «lincoln + lond» должен искать все записи, содержащие оба термина поиска в любом из полей поиска, а также записи, начинающиеся с любого из терминов (например, «Лондон» в этом примере).
Проблема: Теперь мне нужно выбрать стратегию индексации для этой таблицы поиска. (В качестве примечания: я пытаюсь достичь времени отклика менее секунды, наихудшее время отклика должно быть 2 секунды.) Что лучше с точки зрения производительности:
- Создать объединенный индекс из всех запрашиваемых столбцов (потребуется 2 из них, поскольку достигнут предел индекса в 900 байт)
- Поместить отдельные индексы в каждый из запрашиваемых столбцов
- Создание полнотекстового индекса для столбцов с запросом и использование полнотекстового запроса
Я отбрасываю пункт 1, так как он, похоже, не имеет никаких преимуществ (использование индекса будет ограничено, и не будет никакого «поиска по индексу», поскольку не все поля умещаются в один индекс).
Вопрос: Теперь, я должен использовать вариант несколько отдельных индексов или мне следует использовать полнотекстовый индекс ? Есть ли какой-либо другой способ для достижения вышеупомянутой функциональности?