【问题标题】:hash functions-sql studio express哈希函数-sql studio express
【发布时间】:2010-01-18 19:05:57
【问题描述】:

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

【问题讨论】:

    标签: sql-server tsql constraints unique user-defined-functions


    【解决方案1】:

    如果您的目标是确保特定字段中没有重复项,为什么不直接为该字段应用唯一索引并让数据库引擎完成它应该做的事情?

    【讨论】:

    • 我做到了,这很容易使用;但是我的团队负责人想要使用哈希键,因为这些表将包含由字符串字段索引的数十万条记录。
    • @vbNewbie:你的团队领导是个布偶。 @Quick Joe Smith:完美
    【解决方案2】:

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

    您将如何确保哈希是唯一的?有约束吗?

    如果您对它进行索引(由于确定性可能不允许这样做),那么优化器会将其视为非唯一的。以及杀死性能。

    而您只有 100,000 行。花生。

    如果有时间我可以提出更多的论点,但我会总结一下:不要这样做

    【讨论】:

    • 那么 md5 和其他哈希函数除了用于加密之外的目的是什么 - 我了解 SQL 服务器索引等的基本用法。它在其他应用程序中为我提供了很好的服务,但我在这里没有选择。还是他的意思是别的?也许在我的 vb 脚本中实现一些哈希函数以避免重复,但这仍然避免了 sql 索引和约束,对吧?哦,它实际上是数百万条记录
    • 我不知道你为什么有这个要求。但如果是为了管理数据库表中的唯一值,那就是错误的解决方案。我在 2 亿行表上有一个 10(左右)列的唯一索引...
    【解决方案3】:

    总是有HashBytes() 函数。它支持 md5,但如果你不喜欢它,可以选择 sha1。

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

    【讨论】:

    • 谢谢。这有帮助。我确实通过一个 sql server 用户定义的函数实现了一个 md5 函数并且它可以工作。所以从你的帖子中我可以假设散列键对主键选择没有影响吗?我最初有唯一的自动递增键作为我的表的主键,在实现散列函数后我唯一改变的是在散列函数中使用的同一字段上创建索引。此外,如果要使用基本查询从 1 个或多个表中选择记录以匹配主键和外键,那么我不会明确使用哈希键吗?
    • 仅在尝试根据散列函数中使用的字符串字段匹配查询时
    【解决方案4】:

    加密保存哈希函数是一种单向函数,它们消耗的资源(CPU 周期)比加密不安全的函数更多。如果您只需要作为哈希键的功能,则不需要此类属性。您所需要的只是与均匀性相关的碰撞概率低。试试 whit CRC,或者如果你有数字的字符串或模数。

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

    【讨论】:

      【解决方案5】:

      为什么不使用默认为 NEWSEQUENTIALID() 的 GUID ..不要使用 NEWID(),因为它对于集群来说很糟糕,请参见此处:Best Practice: Do not cluster on UniqueIdentifier when you use NewId

      将此列设为主键,您就大功告成了

      【讨论】:

        猜你喜欢
        • 2022-01-03
        • 2016-03-25
        • 2011-02-27
        • 2011-08-04
        • 2011-07-10
        • 2011-02-04
        • 2019-07-24
        • 2010-10-13
        • 2017-01-22
        相关资源
        最近更新 更多