【问题标题】:To store 128 bit hash: two bigints or binary(16)?存储 128 位散列:两个大整数或二进制(16)?
【发布时间】:2017-12-02 08:56:15
【问题描述】:

我必须将几百万个 128 位哈希值存储到数据库中,并且我正在为我的表设计而苦苦挣扎。

我应该将哈希存储在两个 BIGINT 字段中还是只使用 BINARY(16)?我的典型用例是根据哈希查找重复记录。

我可以只使用(两个大整数)

select * from hash where hash1=@hash1 and hash2=@hash2

或(使用 binary(16) 列)

select * from hash where hash=@hash

性能是否重要?

我正在使用 MS SQL Server,但我认为这在这里并不重要。但是,我正在从 C# 程序访问 MS SQL,并且首选易于读取/写入值,但不是交易破坏者。目前我有一个ulong数组。

【问题讨论】:

  • 如果单个值有 128 位,为什么要将它拆分为多个列?
  • 好问题。由于我的程序是用 C# 编写的,并且 128 位存储在 ulong 数组中,因此在 SQL 中使用它感觉很自然。
  • 我对如何处理比较特别好奇。在 64 位架构上,两个 BIGINT 可以在两个操作中进行比较。 BINARY(16) 是否也会在两个操作中进行比较,还是逐字节比较?

标签: sql sql-server hash 128-bit


【解决方案1】:

无论哪种方式,您都可能会进行全表扫描,对我来说,使用 binary 或 varbinary 似乎更有意义,并且只在一个列上有一个索引。

【讨论】:

    猜你喜欢
    • 2021-06-13
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    相关资源
    最近更新 更多