Алгоритм сопоставления в SQL Server 2008 - PullRequest
2 голосов
/ 04 ноября 2011

В моей таблице более 3 миллионов строк. Когда пользователь пытается вставить или обновить эту таблицу, я должен последовательно проверить следующие условия. (Бизнес-потребность)

  1. Имеет ли какой-либо из рядов одинаковый адрес?
  2. Имеет ли какая-либо строка одинаковый почтовый индекс?
  3. Есть ли в какой-либо строке одинаковые значения DOB?

Очевидно, что вновь вставленная или обновленная строка будет соответствовать партии записей из этой таблицы.

Но бизнес-необходимость заключается в том, что процесс сопоставления должен завершиться, когда будет найдено первое совпадение (строка) и эта строка должна быть возвращена.

Я могу легко добиться этого, используя простой запрос "SELECT". Но на поиск соответствия уходит очень много времени.

Пожалуйста, предложите какой-нибудь эффективный способ сделать это.

1 Ответ

0 голосов
/ 04 ноября 2011

Если вы просто ищете способ вернуться после первого матча, используйте LIMIT 1.

Возможно, вы захотите вести таблицу дат рождения или почтовых индексов и указывать в каждой строке ссылку на пользователя, чтобы вы могли легко отфильтровать клиентов по меньшему набору. Это позволит вам выполнять намного более быстрый поиск в базе данных.

Пример:

dob      | userID
1/1/1980 | 235
1/1/1980 | 482
1/1/1980 | 123
2/1/1980 | 521

В этом сценарии вам нужно только прочитать 3 строки из большой таблицы пользователей, если вашей целевой датой является 01.01.1980. Это тоже с помощью индекса первичного ключа, так что это будет очень быстро.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...