хэш-функции-sql studio express - PullRequest
       18

хэш-функции-sql studio express

2 голосов
/ 18 января 2010

Мне нужно создать хеш-ключ на моих таблицах для уникальности, и кто-то упомянул мне про md5. Но я читал о контрольной сумме и двоичной сумме; не будет ли это служить той же цели? Чтобы не было дубликатов в конкретном поле. Теперь мне удалось реализовать это, и я вижу ключи hask в своих таблицах. Нужно ли изменять индексные ключи, изначально созданные с тех пор, как я создал новый индексный ключ с этими хэш-ключами? Также мне нужно изменить ключи? Как мне изменить мои запросы, например, операторы SELECT? Наверное, я все еще не уверен, как хеш-ключи действительно помогают в запросах, отличных от уникальности?

Ответы [ 5 ]

2 голосов
/ 18 января 2010

Нет смысла писать уникальную функцию для замены уникальных ограничений / индексов SQL Server.

Как вы собираетесь обеспечить уникальность хэша?С ограничением?

Если вы проиндексируете его (что может быть недопустимо из-за детерминизма), оптимизатор будет рассматривать его как неуникальное.А также производительность убийства.

И у вас есть только несколько 100 000 строк.Арахис.

Со временем я мог бы выдвинуть больше аргументов, но я подведу итог: Не делайте этого

2 голосов
/ 18 января 2010

Если ваша цель состоит в том, чтобы не допустить дубликатов в определенном поле, почему бы просто не применить уникальный индекс к этому полю и позволить ядру базы данных делать то, для чего он предназначен?

1 голос
/ 18 января 2010

Всегда есть функция HashBytes () .Он поддерживает md5, но если вам это не нравится, есть опция для sha1.

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

0 голосов
/ 18 января 2010

почему бы вам не использовать GUID со значением по умолчанию NEWSEQUENTIALID () ..не использовать NEWID (), так как это ужасно для кластеризации, см. Здесь: Рекомендация: не кластеризуйте на UniqueIdentifier, когда вы использовать NewId

сделайте этот столбец первичным ключом, и вы почти закончили

0 голосов
/ 18 января 2010

Криптографическое сохранение Хэш-функции - это односторонние функции, которые потребляют больше ресурсов (циклов ЦП), чем функции, которые не являются криптографически безопасными. Если вам просто нужна функция в качестве хеш-ключа, вам не нужно такое свойство. Все, что вам нужно, это низкая вероятность столкновений, что связано с однородностью. Попробуйте использовать CRC или если у вас есть строки или по модулю для чисел.

http://en.wikipedia.org/wiki/Hash_function

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