Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Можно ли так ?  [new]
Леша777
Guest
Добрый день.
Есть таблица с пользователями , а у них email от 40 - 80 символов. Нормально ли будет добавить computed column :

CAST( HasBytes('Md5', LOWER(COALESCE(LTRIM(RTIM(Email)) , N'')) ) as VARBINARY(16))

На нем некластерный индекс. И поиск по имэйлу проводить по нему(те же преобразования с введенным текстом)

Нету ли каких-нибудь подводных камней в таком подходе ? (я не нашел вроде ищет правильно) . Одинаковых хешей тоже не встретил для разных имэйлов их больше 90 000. Может как-нибудь оптимальнее можно ?

2005 sp3.

Cпасибо.
21 дек 09, 12:33    [8094874]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли так ?  [new]
Glory
Member

Откуда:
Сообщений: 104760
А просто индекс по полю Email почему не подходит ?
21 дек 09, 12:37    [8094897]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли так ?  [new]
vino
Member

Откуда:
Сообщений: 1191
Леша777, типо, экономишь?
Леша777
...email от 40 - 80 символов...
в MD5 коллизии не так редки, так что поиск все-таки нужен двухэтапный (сначала по хеш-ключу, потом из полученного списка - по точному совпадению). Поэтому затевать это следует, если длина текста для сравнения существенно бОльшая.
А в твоем предложении, IMHO, вообще лучше избавиться от незначащих строк:
CAST( HasBytes('Md5',  LOWER(nullif(LTRIM(RTIM(Email)), N'')) ) as VARBINARY(16))

Леша777
...оптимальнее можно ?
Воспользоваться типовыми средствами индексирования и поиска 2005-го.
21 дек 09, 13:32    [8095307]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить