sql - 警告!最大 key 长度为 900 字节。索引的最大长度为 8009 字节

标签 sql sql-server t-sql database-administration

我有一个临时变量,其中包含基于 SHA1 hasbyte 的计算列。当我在计算列上创建 UNIQUE 非聚集索引时,它会抛出警告::

Warning! The maximum key length is 900 bytes. The index 'UQ__#B445E45__954B055AC5951B75' has maximum length of 8009 bytes. For some combination of large values, the insert/update operation will fail.

我记得读出的 SHA1 字节被限制为大约 160 个字节。我无法理解为什么会收到此警告。

如果通过以下查询检查计算列中涉及的所有列的最大长度,则总计约为 8148 字节。但我认为使用我使用的哈希值,计算列的长度不应超过 160 个字节。

SELECT Sum(c.max_length)
FROM SYS.COLUMNS C INNER JOIN SYS.TABLES tb ON tb.[object_id] = C.  [object_id]
INNER JOIN SYS.TYPES T ON C.system_type_id = T.user_type_id
WHERE tb.[is_ms_shipped] = 0
and OBJECT_NAME(tb.object_id)='xyz'

请告诉我这里缺少什么。

最佳答案

我不是哈希专家:

但我建议您创建一个列combine varchar(750) (15*50)

然后使用SET组合= Col1+ Col2+ Col3+.. Col15更新该列

并尝试:

CompSum AS HashBytes('SHA1', combine)

这样你使用的字段永远不会大于 750

关于sql - 警告!最大 key 长度为 900 字节。索引的最大长度为 8009 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42145467/

相关文章:

mysql - 查找 Actor 在同一部电影中具有多个不同角色的 Actor /电影行

sql-server - 根据矩阵找到有效组合

mysql - 相同的应用程序,不同的数据库 : Entity framework 6. X + MySQL + SQL Server

sql-server - 如何快速关闭 Microsoft SQL Server Service Broker 的所有元素?

sql-server - 将 Openquery 中的丹麦语字符 (Æ Ø Å) 保留到链接服务器

sql - 将一组行显示为单行

sql-server - T-SQL 脚本应如何检测它是在 Azure SQL 数据库中运行还是在本地运行?

mysql - 具有比较日期的嵌套子查询

c# - SQL:按日期分组

sql - 复杂用户匹配算法性能