我有一个包含数百万条记录的巨大表格,假设我的自然键太大而且将来可能会改变,我想添加一个代理主键,并将该代理作为外键用于不同的表。 / p>
此表的大部分访问权限都是使用自然键
进行搜索答案 0 :(得分:2)
我的建议是创建一个简单的INT
数据类型主键,如果您使用的是MySQL AUTO_INCREMENT
,IDENTITY
如果您使用的是MS SQL Server或SEQUENCE
如果您使用的是Oracle。如果需要性能,主键的INT
数据类型非常好。
自然键应该是一个索引列,以便更好地搜索。
答案 1 :(得分:0)
执行此操作的最佳方法是使用数据库生成的唯一键(例如MySQL中的AUTO_INCREMENT及其他RDBMS中的兄弟),并创建由此键和自然键组成的组合主键。
让我解释原因:
作为辅助唯一键的自然键具有创建非常糟糕的键本地化的巨大缺点:顺序键值往往分布在磁盘周围,使得密钥缓存的使用效率非常低(无论如何实现,这个概念)。自动增量键往往几乎完全本地化,即磁盘上的单个页面转换为单个磁盘搜索,很可能包含更大的键空间部分。
通过将“数据库自然”键与“应用程序自然”键(按此序列!!)组合到组合主键中,您可以获得两全其美的效果。如果自然键由一些随机因素组成,例如GUID,则尤其如此。