良好的散列函数是一种允许您从任何给定输入创建分布式值的方法。因此,您将获得每个输入值的一些唯一值。它们也是可重复的,因此任何输入都将始终生成相同的输出。
一个好的散列函数的例子是 SHA1 或 SHA256。
假设您有一个用户数据库表。这些列是id、last_name、first_name、telephone_number 和address。
虽然这些列中的任何一个都可能有重复,但我们假设没有完全相同的行。
在这种情况下,id 只是我们制作的唯一主键(代理键)。 id 字段实际上不包含任何用户数据,因为我们找不到对用户来说唯一的自然键,但我们使用 id 字段与其他表建立外键关系。
我们可以像这样从我们的数据库中查找用户记录:
SELECT * FROM users
WHERE last_name = 'Adams'
AND first_name = 'Marcus'
AND address = '1234 Main St'
AND telephone_number = '555-1212';
我们必须使用 4 个不同的索引搜索 4 个不同的列,才能找到我的记录。
但是,您可以创建一个新的“散列”列,并存储所有四列组合的散列值。
String myHash = myHashFunction("Marcus" + "Adams" + "1234 Main St" + "555-1212");
您可能会得到一个像 AE32ABC31234CAD984EA8 这样的哈希值。
您将此哈希值作为列存储在数据库中并在其上建立索引。您现在只需搜索一个索引。
SELECT * FROM users
WHERE hash_value = 'AE32ABC31234CAD984EA8';
一旦我们获得了所请求用户的 id,我们就可以使用该值在其他表中查找相关数据。
这个想法是散列函数从数据库服务器卸载工作。
不太可能发生碰撞。如果两个用户的哈希值相同,则很可能他们有重复的数据。