首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表中主键的选择是什么?

问表中主键的选择是什么?
EN

Stack Overflow用户
提问于 2012-02-29 10:20:51
回答 2查看 152关注 0票数 0

我有一个巨大的表,其中包含数百万条记录,假设我的自然密钥太大,而且将来可能会改变,我想添加一个代理项主键,并将在不同的表中使用该代理项作为外键。

,

  • ,我应该把我的自然键也作为主键吗?或者应该像其他专栏一样?

这个表的大部分访问是通过自然键进行搜索的。

  • 为了时间性能,应该删除自然密钥还是将其定义为备用键?
  • i不希望有两个相同的自然键,如何使用自然密钥作为主键?
  • ,如果我使用自然密钥作为主键,同时添加另一个替代键并将其定义为主键,这意味着什么?我试着搜索示例,可以找到一个很好的例子,链接/示例也会有帮助。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-29 10:27:58

我的建议是创建一个简单的INT数据类型主键,如果使用MySQL,则将其改为AUTO_INCREMENT;如果使用MySQL,则为IDENTITY。如果需要性能,主键的INT数据类型是非常好的。

自然键应该是索引列,以便进行更好的搜索。

票数 2
EN

Stack Overflow用户

发布于 2012-02-29 10:31:46

要做到这一点,最好的方法是使用数据库生成的唯一密钥(例如AUTO_INCREMENT在MySQL中,以及在其他关系数据库管理系统中它的兄弟关系),并创建一个由这个键和您的自然密钥组成的组合主键。

让我解释一下为什么:

作为第二个唯一键的自然密钥具有创建非常糟糕的密钥本地化的巨大缺点:顺序键值往往分布在磁盘周围,使得密钥缓存的使用效率非常低(不管它是如何实现的,这个概念仍然有效)。自动增长键趋向于几乎完全本地化,即磁盘上的单个页面,即转换为单个磁盘查找,很可能包含更大一部分的密钥空间。

通过将“数据库-自然”键与“应用程序-自然”键相结合(按此顺序!)对于一个组合的主键,您可以从这两个世界中得到最好的结果。如果自然密钥由一些随机因素(如GUID )组成,则尤其如此。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9497288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档