У нас есть таблица базы данных SQL Server с около 60 миллионами записей.Это записи имен и адресов конкретных лиц.Таблица содержит следующие столбцы:
[Name] [nvarchar](425) NOT NULL,
[Street] [nvarchar](900) NULL,
[City] [nvarchar](900) NULL,
[State] [nvarchar](900) NULL,
[PostalCode] [nvarchar](100) NULL
Что нам нужно сделать, так это уметь выполнять конкретный оператор выбора менее чем за 1 секунду.
Мы должны иметь возможность выбирать записи в зависимости от того, ''Имя] 'содержит одно или несколько введенных слов (не «точное совпадение» и не «начинается с») и затем применяет следующую логику приоритизации:
- Отображение в верхних записях, которые расположены в данном [State]и [Город]
- Показать элементы, которые находятся в данном [Штате], но другом городе
- Показать элементы, которые находятся в других штатах
Вот что мы имеемпробовал:
- Мы пытались перестроить таблицу различными способами, извлекая разные столбцы в разные таблицы, разные наборы индексов, извлекая каждое слово в качестве токена в отдельную папку
- SQL Server fullтекстовый поиск.(для сопоставления записей с функцией «Содержит»)
- Azure Cosmos DB.Мы перенесли туда данные, чтобы оценить, можем ли мы выполнить выборки достаточно эффективно
Проблема всегда в том, чтобы расставить приоритеты в записях на основе состояния + город
Вопрос в том, как мы можем достичь способности выполнятьвыбирает менее 1 секунды для этого случая, используя SQL Server или любой другой источник данных (предпочтительно доступный в Azure)