我们希望将 MD5 用于我们的散列函数而不是 SHA_256,但从 SQL Server 2016 开始,不推荐使用 MD5。我们将其用于散列(比较哪些记录已更改)。我们现在面临着使用此函数或使用 SHA_256 导致存储和性能开销的风险。令人沮丧的是,微软决定弃用这些功能,即使它们在某些情况下仍然有用。
该项目不是业务的关键组成部分。我们可能会选择 SHA_256,但这是正确的选择吗?新开发是否应该始终避免已弃用的功能?
对于上下文 - 每天将大约 1-2 百万个更新插入到一个 4 亿行表中,比较动态的哈希字节。大约 30 列宽
https://learn.microsoft.com/en-us/sql/t-sql/functions/hashbytes-transact-sql?view=sql-server-2017
来自微软的文档:
该页面的另一部分说:
根据您使用 MD5 和 HASHBYTES 的方式,除了使用 SHA_256 之外,您可能还有其他可用选项。
您可能有兴趣使用我记录的这种方法来确定哪些行发生了变化。它使用
rowversion
源表中的列来让您立即查看新行或有更改的行。这避免了使用不推荐使用的功能,并且比任何散列函数都快得多。