【发布时间】:2011-02-13 10:10:19
【问题描述】:
背景:
- 我有一个简短的字符串列表。
- 字符串的数量并不总是相同,但几乎总是“少数”的数量级
- 在我们的数据库中,这些字符串将存储在第二个规范化表中
- 这些字符串在写入数据库后永远不会更改。
我们希望能够在查询中快速匹配这些字符串,而不会因执行大量连接而影响性能。
所以我正在考虑将所有这些字符串的哈希码存储在主表中并将其包含在我们的索引中,因此只有当哈希码匹配时才会由数据库处理连接。
那么我如何获得一个好的哈希码呢?我可以:
- 对所有字符串的哈希码进行异或运算
- Xor 与每个字符串后的结果相乘(例如乘以 31)
- 将所有字符串放在一起,然后得到哈希码
- 其他方式
那么人们是怎么想的呢?
最后我只是连接字符串并计算连接的哈希码,因为它很简单并且工作得很好。
(如果您关心我们使用的是 .NET 和 SqlServer)
错误!错误!
Quoting from Guidelines and rules for GetHashCode Eric Lippert
文档 System.String.GetHashCode 注释 特别是两个相同的 字符串可以有不同的哈希码 在不同版本的 CLR 中,以及 事实上他们确实如此。不要存储字符串 数据库中的哈希并期望它们 永远一样,因为他们 不会的。
所以 String.GetHashcode() 不应该用于此。
【问题讨论】:
标签: .net database-design hashcode