首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL表主键

SQL表主键
EN

Stack Overflow用户
提问于 2011-11-01 17:38:48
回答 2查看 153关注 0票数 1

使用Guid和Int主键哪个更好?一些搜索结果偏向于Guid,另一些偏向于Int。那么,每种方法的优缺点是什么呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-01 18:02:13

对于SQL Server,我个人将INT IDENTITY用于我的大多数主键和集群键。

您需要将主键分开,这是一个逻辑结构-它唯一地标识您的行,它必须是唯一的、稳定的和NOT NULL的。GUID也可以很好地用于主键-因为它可以保证是唯一的。如果使用SQL Server复制,则GUID作为主键是一个很好的选择,因为在这种情况下,无论如何都需要一个唯一标识GUID列。

SQL Server中的集群关键字是一种物理结构,用于数据的物理排序,要正确处理要困难得多。通常,SQL Server上的索引女王Kimberly Tripp还要求一个好的聚集键是唯一的、稳定的、尽可能窄的,并且理想情况下会不断增加( INT IDENTITY就是这样)。

在这里查看她关于索引的文章:

  • GUIDs as PRIMARY KEYs and/or the clustering key
  • The Clustered Index Debate Continues...
  • Ever-increasing clustering key - the Clustered Index Debate..........again!
  • Disk space is cheap - THAT'S NOT THE POINT

也可以看看吉米·尼尔森的The Cost of GUIDs as Primary Key

GUID对于聚集键来说是一个非常糟糕的选择,因为它是广泛的,完全随机的,因此会导致糟糕的索引碎片和糟糕的性能。此外,聚类键行也存储在每个非聚集(附加)索引的每个条目中,所以您真的希望保持它很小- GUID是16字节,而INT是4字节,并且有几个非聚集索引和数百万行,这会产生巨大的差异。

在SQL Server中,默认情况下,您的主键是您的聚集键-但它不是必须的。您可以很容易地使用GUID作为您的非集群主键,并使用INT IDENTITY作为您的集群键-这只需要一点了解。

票数 2
EN

Stack Overflow用户

发布于 2011-11-01 17:44:54

因为整数主键是顺序的(假设是自动递增的),所以更容易将行写入数据库。GUID本质上是随机的,所以插入一行可能会导致页面拆分,从而降低插入速度。如果您真的想使用GUID作为PK,可以考虑使用newsequentialid函数,它可以确保GUID按顺序生成。

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

https://stackoverflow.com/questions/7964684

复制
相关文章

相似问题

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