【发布时间】: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