【问题标题】:Should key values in a database table be hashed?数据库表中的键值是否应该被散列?
【发布时间】:2010-09-18 13:35:31
【问题描述】:
假设一个数据库表有一个列“名称”,它被定义为表的键。
通常的名称值为“Bill”、“Elizabeth”、“Bob”、“Alice”。对表的查找也将通过 name 键完成。
散列值是否以任何方式优化操作?即输入每个名称作为名称的一些散列值(假设 MD5 - 32 位)。
如果是这样 - 这不应该是数据库的一个功能,而不是客户端处理的东西吗?
【问题讨论】:
标签:
database
database-design
hash
key
【解决方案1】:
假设您的数据库为主键生成一个索引(我无法想象它不会),它会为您执行此操作。所以是的,它绝对应该是数据库处理的东西。
【解决方案2】:
“散列值是否以任何方式优化操作?” 不是。
哈希是单向的。您无法进行表扫描并重建原始名称。
如果您想同时保留名称和名称哈希值,那么包含派生数据就违反了一条基本规则。现在名称更新需要哈希更新。
使用散列会发生的“均匀分布我的值”是索引的工作。
【解决方案3】:
不,不要散列它们。您的数据库将根据数据建立索引,而散列将无济于事。它可能的唯一帮助是您的键值比散列长得多。