首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >作为主键的标识列

作为主键的标识列
EN

Stack Overflow用户
提问于 2009-12-03 15:08:09
回答 3查看 8.7K关注 0票数 2

您认为使用identity列作为主键是否是一种好的做法?对于ORM工具,在表上设置identity列会有所帮助。但还有其他副作用,如意外的重复插入。

谢谢Nayn

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-03 15:47:36

对于服务器端生成的密钥,在没有复制或大量数据合并的环境中,身份密钥是一种很好的实践。由于它们的实现方式,它们不允许在同一个表中出现重复,所以不用担心这一点。它们还具有最小化没有大量删除的表中的碎片的优点。

GUID是常用的替代方法。它们的优势在于,您可以在web层创建它们,而不需要数据库往返。然而,它们比标识更大,并且它们可能导致极端的表碎片。因为它们是(半)随机的,所以插入分散在整个表中,而不是集中在最后的一页中。

票数 3
EN

Stack Overflow用户

发布于 2009-12-03 18:00:02

是的,对于SQL Server来说,使用INT (或BIGINT)标识是非常好的做法。

SQL Server使用主键作为其默认群集键,并且群集键应始终具有以下属性:

  • narrow
  • static
  • unique
  • ever-increasing

INT IDENTITY非常适合这个条件!

有关更多背景信息,尤其是为什么GUID作为主要(以及集群关键字)是bad的想法的一些信息,请参阅Kimberly Tripp的优秀帖子:

  • GUIDs as PRIMARY KEYs and/or the clustering key
  • The Clustered Index Debate Continues...
  • Ever-increasing clustering key - the Clustered Index Debate..........again!

如果您有理由使用GUID作为主键(例如复制),那么一定要确保在这些表上有一个INT标识作为您的聚类键

Marc

票数 4
EN

Stack Overflow用户

发布于 2009-12-03 15:16:14

我使用Guid,因为当我处理分布式应用程序时,它真的很有用。尤其是当所有分布式实例还需要创建新数据时。

然而,在简单的情况下,我不认为自动增量整数主键有任何问题。实际上,我更喜欢它们,因为直接使用SQL查询更容易,因为它更容易记住。

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

https://stackoverflow.com/questions/1838199

复制
相关文章

相似问题

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