作为散列的主键应该存储为 BINARY 还是 CHAR(十六进制)?
Should a primary key which is a hash be stored as BINARY or CHAR (in hex)?
记录由 32 字节的 SHA-2 值标识。使用 BINARY 更紧凑(每字节 8 位 vs 每字节 4 位),但这被在即席查询(故障排除等)中使用二进制值的难度增加所抵消。我倾向于在 64 字节 CHAR 字段中存储为十六进制字符串。除了每个记录开销 4 字节 32 字节之外,是否还有其他问题或疑虑?
更新:根据评论,我在 SQL 2012 年做了一些测试,在涉及二进制键的即席查询 (SSMS) 中不再有任何 'difficulty'。我在这个话题上的经验有点过时了。在 SQL Server 2000 的 SSMS 中,没有从二进制字符串到十六进制字符串的隐式转换。因此,有必要通过函数在二进制和十六进制字符串之间进行显式转换以获得任何有意义的结果。在 SQL Server 2005 中似乎发生了变化。
我正在寻找与此问题类似的答案。然而,这是一个将 GUID 作为二进制或 varchar 存储在数据库中的问题。不同类型的对象但相同的原理。
以下是更多信息:
How should I store GUID in MySQL tables?
我还发现了一篇有用的文章,比较了查询 table 的性能,其中包含数百万行的二进制主键和数百万行的 varchar。使用二进制时搜索性能非常好,所以当我知道我将要处理很多行时,我现在就使用它。很遗憾我无法找到原始文章。
一旦您完成所有设置以管理二进制信息,它就和使用 varchar 一样简单了。
记录由 32 字节的 SHA-2 值标识。使用 BINARY 更紧凑(每字节 8 位 vs 每字节 4 位),但这被在即席查询(故障排除等)中使用二进制值的难度增加所抵消。我倾向于在 64 字节 CHAR 字段中存储为十六进制字符串。除了每个记录开销 4 字节 32 字节之外,是否还有其他问题或疑虑?
更新:根据评论,我在 SQL 2012 年做了一些测试,在涉及二进制键的即席查询 (SSMS) 中不再有任何 'difficulty'。我在这个话题上的经验有点过时了。在 SQL Server 2000 的 SSMS 中,没有从二进制字符串到十六进制字符串的隐式转换。因此,有必要通过函数在二进制和十六进制字符串之间进行显式转换以获得任何有意义的结果。在 SQL Server 2005 中似乎发生了变化。
我正在寻找与此问题类似的答案。然而,这是一个将 GUID 作为二进制或 varchar 存储在数据库中的问题。不同类型的对象但相同的原理。
以下是更多信息: How should I store GUID in MySQL tables?
我还发现了一篇有用的文章,比较了查询 table 的性能,其中包含数百万行的二进制主键和数百万行的 varchar。使用二进制时搜索性能非常好,所以当我知道我将要处理很多行时,我现在就使用它。很遗憾我无法找到原始文章。
一旦您完成所有设置以管理二进制信息,它就和使用 varchar 一样简单了。