Sql server sql studio express的哈希函数

Sql server sql studio express的哈希函数,sql-server,tsql,constraints,unique,user-defined-functions,Sql Server,Tsql,Constraints,Unique,User Defined Functions,我需要在我的表上创建一个散列键以实现唯一性,并且有人向我提到了md5。但我读过校验和和和二进制和;这不是同样的目的吗?确保特定字段中没有重复项。 现在我设法实现了这一点,我在表中看到了hask键。 我是否需要更改最初创建的索引键,因为我使用这些散列键创建了一个新的索引键?我还需要换钥匙吗? 如何更改查询(例如SELECT语句)? 我想我仍然不确定散列键在查询中除了唯一性之外还有什么帮助?如果您的目标是确保特定字段中没有重复项,那么为什么不对该字段应用唯一索引,让数据库引擎执行它应该执行的操作呢?

我需要在我的表上创建一个散列键以实现唯一性,并且有人向我提到了md5。但我读过校验和和和二进制和;这不是同样的目的吗?确保特定字段中没有重复项。 现在我设法实现了这一点,我在表中看到了hask键。 我是否需要更改最初创建的索引键,因为我使用这些散列键创建了一个新的索引键?我还需要换钥匙吗? 如何更改查询(例如SELECT语句)?
我想我仍然不确定散列键在查询中除了唯一性之外还有什么帮助?

如果您的目标是确保特定字段中没有重复项,那么为什么不对该字段应用唯一索引,让数据库引擎执行它应该执行的操作呢?

始终有这个功能。它支持md5,但如果您不喜欢它,就可以选择sha1


至于这如何帮助查询:一个简单的例子是,如果您有一个大的varchar列-可能是varchar max-并且在您的查询中,您想知道该列的内容是否与特定字符串匹配。如果你必须将搜索结果与每一条记录进行比较,那么搜索速度可能会很慢。但是,如果您散列搜索字符串并使用它,事情会发展得更快,因为现在它只是一个非常短的二进制比较。

编写唯一函数来替换SQL Server唯一约束/索引是没有意义的

如何确保哈希是唯一的?有限制吗

如果您为它编制了索引,但由于决定论的原因可能不允许,那么乐观主义者会将其视为非唯一的。以及扼杀性能

你只有100000行。花生


如果有时间,我可以提出更多的参数,但我将总结:不要这样做,加密保存哈希函数是单向函数,它们比加密不安全的函数消耗更多的资源CPU周期。若您只需要函数作为散列键,那个么就不需要这样的属性。你们所需要的只是低概率的碰撞,这与均匀性有关。如果您有字符串或数字的模,请尝试使用CRC


为什么不使用默认值为NEWSEQUENTIALID的GUID..不要使用NEWID,因为它对群集非常糟糕,请参见此处:


将此列作为主键,您就完成了大部分工作

我完成了,这很容易使用;但是我的组长希望使用哈希键,因为这些表将包含由字符串字段索引的数十万条记录。@vbNewbie:您的组长是一个木偶@乔·史密斯:谢谢。这很有帮助。我确实通过SQLServer用户定义的函数实现了md5函数,并且它可以正常工作。那么从你的帖子中,我可以假设散列键对主键选择没有影响吗?我最初使用唯一的自动递增键作为表的主键,在实现哈希函数后,我唯一做的更改是在哈希函数中使用的相同字段上创建索引。如果要使用基本查询从1个或多个表中选择记录以匹配主键和外键,那么我不会显式地使用散列密钥,对吗?只有在尝试根据散列函数中使用的字符串字段匹配查询时,md5和其他散列函数除了用于加密之外还有什么用途?我了解SQL server索引等的基本用法。它在其他应用程序中对我很有用,但我没有选择这里。或者他有别的意思;也许在我的vb脚本中实现一些散列函数以避免重复,但这仍然可以避免sql索引和约束,对吗?哦,事实上这是数百万条记录。我不知道你为什么有这个要求。但如果是为了管理数据库表中的唯一值,那么这是错误的解决方案。我在一个2亿行的表上有一个10列左右的唯一索引。。。