我有一个巨大的表,其中包含数百万条记录,假设我的自然密钥太大,而且将来可能会改变,我想添加一个代理项主键,并将在不同的表中使用该代理项作为外键。
,
这个表的大部分访问是通过自然键进行搜索的。
发布于 2012-02-29 10:27:58
我的建议是创建一个简单的INT数据类型主键,如果使用MySQL,则将其改为AUTO_INCREMENT;如果使用MySQL,则为IDENTITY。如果需要性能,主键的INT数据类型是非常好的。
自然键应该是索引列,以便进行更好的搜索。
发布于 2012-02-29 10:31:46
要做到这一点,最好的方法是使用数据库生成的唯一密钥(例如AUTO_INCREMENT在MySQL中,以及在其他关系数据库管理系统中它的兄弟关系),并创建一个由这个键和您的自然密钥组成的组合主键。
让我解释一下为什么:
作为第二个唯一键的自然密钥具有创建非常糟糕的密钥本地化的巨大缺点:顺序键值往往分布在磁盘周围,使得密钥缓存的使用效率非常低(不管它是如何实现的,这个概念仍然有效)。自动增长键趋向于几乎完全本地化,即磁盘上的单个页面,即转换为单个磁盘查找,很可能包含更大一部分的密钥空间。
通过将“数据库-自然”键与“应用程序-自然”键相结合(按此顺序!)对于一个组合的主键,您可以从这两个世界中得到最好的结果。如果自然密钥由一些随机因素(如GUID )组成,则尤其如此。
https://stackoverflow.com/questions/9497288
复制相似问题