作为哈希的主键是应该存储为BINARY还是CHAR(十六进制)?

时间:2015-05-13 18:32:40

标签: sql sql-server primary-key

记录由32字节SHA-2值标识。使用BINARY更紧凑(每字节8位,每字节4位),但是在特殊查询中使用二进制值的难度增加(故障排除等)会抵消这一点。我倾向于在64字节的CHAR字段中存储为十六进制字符串。除了每个记录开销的 4字节 32字节之外是否还有其他任何问题或疑虑?

更新:基于评论,我在SQL 2012中进行了一些测试,并且在涉及二进制密钥的特殊查询(SSMS)中不再存在任何“困难”。我对这个主题的经验有点过时了。在SSMS for SQL Server 2000中,没有从二进制到十六进制字符串的隐式转换。因此有必要通过函数显式转换二进制和十六进制字符串以获得任何有意义的结果。看起来在SQL Server 2005中发生了变化。

1 个答案:

答案 0 :(得分:1)

我正在寻找这个问题的类似答案。但是,这是一个将GUID存储为数据库中的二进制文件或varchar的问题。不同类型的对象但原理相同。

以下是一些更多信息: How should I store GUID in MySQL tables?

我还发现了一篇有用的文章,将查询表的性能与数百万行的二进制主键和数百万行作为varchar进行了比较。使用二进制文件时搜索性能非常高,所以当我知道我要处理大量行时,我现在就使用它。不幸的是我无法找到原始文章。

一旦你完成所有设置以管理二进制信息,它就不会比使用varchar更多了。

相关问题