Мне нужно создать хэш-ключ на моих столах для уникальности, и кто-то сказал мне о md5. Но я прочитал о контрольной сумме и двоичной сумме; не будет ли это той же целью? Чтобы не было дубликатов в определенной области. Теперь мне удалось реализовать это, и я вижу ключи хэша в своих таблицах. Нужно ли мне изменять исходные ключи, созданные с момента создания нового ключа индекса с помощью этих хеш-ключей? Также мне нужно сменить ключи? Как мне изменить свои запросы, например, инструкции SELECT? Я догадываюсь, что я до сих пор не уверен, что ключи хэша действительно помогают в запросах, кроме уникальности?hash functions-sql studio express
ответ
Всегда есть функция HashBytes(). Он поддерживает md5, но если вам не нравится, есть опция для sha1.
А как это может помочь запросам: один простой пример: если у вас есть большой VARCHAR столбец — возможно VARCHAR макс — и в вашем запросе вы хотите знать, если содержимое этого столбца соответствует заданной строке. Если вам нужно сравнить свой поиск с каждой отдельной записью, это может быть медленным. Но если вы используете хэш-строку поиска и используете ее, все может пойти намного быстрее, так как теперь это всего лишь очень короткое двоичное сравнение.
Если ваша цель - не содержать дубликатов в определенном поле, почему бы просто не применить уникальный индекс к этому полю и позволить движку базы данных делать то, что он должен был делать?
Я сделал, и это прост в использовании; но мой руководитель группы хочет использовать хэш-ключ, поскольку таблицы будут содержать сотни тысяч записей, проиндексированных строковым полем. – vbNewbie
@vbNewbie: ваша команда - это маппет. @Quick Joe Smith: perfect – gbn
спасибо gbn, я согласен, но так как я новый парень ... – vbNewbie
Нет смысла писать уникальную функцию для замены уникальных ограничений/индексов SQL Server.
Как вы собираетесь гарантировать, что хэш уникален? С ограничением?
Если вы указали его (что может быть недопустимо из-за детерминизма), то оптимизатор будет рассматривать его как не уникальный. Также как и убийство.
И у вас есть только несколько 100 000 строк. Арахис.
Учитывая время я мог придумать больше аргументов, но я буду резюмировать: Не делают это
Итак, в чем цель md5 и других хеш-функций помимо криптографии - я понимаю основное использование индексов SQL-сервера и т. Д. хорошо служил мне в других приложениях, но у меня нет выбора здесь. Или он имел в виду что-то еще; возможно, реализация некоторой хеш-функции в моем скрипте vb, чтобы избежать дубликатов, но которая все еще избегает индексов и ограничений sql, правильно? О, и это на самом деле миллионы записей – vbNewbie
Я понятия не имею, почему у вас есть это требование. Но если для управления уникальными значениями в таблице базы данных это неправильное решение. У меня есть 10 (или около того) столбцов уникальный индекс на 200 миллионов строк таблицы ... – gbn
Криптографически сохранить функции хеширования являются одним из способов функции, и они потребляют больше ресурсов (циклы CPU), что функции которые не являются криптографически безопасными. Если вам просто нужна функция как хэш-ключ, вам не нужно такое свойство. Все, что вам нужно, - это низкая вероятность столкновения, что связано с единообразием. Попробуйте использовать CRC или если у вас есть строки или по модулю для чисел.
почему бы вам не использовать GUID с дефолтом NEWSEQUENTIALID() ..don't использовать NEWID(), так как это ужасно для кластеризации, смотрите здесь: Best Practice: Do not cluster on UniqueIdentifier when you use NewId
сделать это столбец первичный ключ, и вы в значительной степени сделали
- 1. Visual Studio Express 2013
- 2. Visual Studio Express Edition
- 3. Sql Server Management Studio Express
- 4. Microsoft Visual Studio Express 2012
- 5. Specflow с Visual Studio express
- 6. Visual Studio Express в Ubuntu12.10
- 7. MVC в Visual Studio Express
- 8. Visual studio 2015 IIS Express
- 9. Visual Studio Express 2013 веб
- 10. функции Visual Studio Express Edition
- 11. Установка Visual Studio Express 2010
- 12. Расширение Visual Studio 2012 Express
- 13. SQL server management studio Express
- 14. MS Visual Studio Express Edition
- 15. Visual Studio 2013 IIS Express
- 16. Где Visual Studio 2005 Express?
- 17. Visual Studio Express для Profissional
- 18. Visual Studio Express 2010 лицензия
- 19. Публикация с Visual Studio Express
- 20. Visual Studio 2015 Web Express
- 21. Ruby hash hash of hash
- 22. Visual Studio 2015 express/SQL Server 2014 Express
- 23. Этот проект (Visual Studio 2012 express) несовместим с текущей версией Visual Studio 2013 express
- 24. Hash overriding hash
- 25. Perl Hash of Hash
- 26. Написание Hash of Hash
- 27. Visual Studio 2005 VS Visual Studio Express 2012
- 28. Linking Libcurl в Visual Studio 2008 Express
- 29. Подключение HDP от Teradata Studio Express 15.10
- 30. MSTest in Express выпуски Visual Studio 2010
Спасибо. Что помогает. Я реализовал функцию md5 через пользовательскую функцию sql-сервера, и она работает. Итак, с вашего поста я могу предположить, что хеш-ключи не влияют на выбор первичных ключей?Первоначально у меня были уникальные автоматически увеличивающиеся ключи в качестве первичных ключей для моей таблицы, и единственное, что я изменил после реализации хеш-функции, - это создать индекс в том же поле, которое используется в хэш-функции. Также, если бы были выборки из 1 или более таблиц с использованием базового запроса для соответствия первичному и внешнему ключам, то я бы не использовал хэш-ключ явно правильно? – vbNewbie
только в случае попытки совпадения запроса на основе строкового поля, используемого в хеш-функции. – vbNewbie