主键的SQL数据类型 - SQL Server?

时间:2008-11-01 05:49:29

标签: sql-server database-design types

我们应该使用哪种sql数据类型作为数字基本主键:

  1. INT
  2. BIGINT
  3. 数字

6 个答案:

答案 0 :(得分:52)

通常,int

bigint如果你认为你的行数比宇宙中的原子多。

如果您需要全局唯一键(保证在架构中的所有表中唯一的键,甚至可能是普遍唯一的(我不记得)),

uniqueidentifier非常有用

另外两个我不会使用它们不是整数类型(它们有分数,它们作为键没有多大意义)

答案 1 :(得分:20)

你真的需要分开两个不同的问题:

1)主键是一个逻辑结构 - 唯一且可靠地标识表中一行的关键候选之一。这可以是任何东西,真的 - 一个INT,一个GUID,一个字符串 - 选择对你的场景最有意义的东西。

2)集群密钥(在表上定义“聚集索引”的一列或多列) - 这是物理存储相关的东西,在这里,一个小的,稳定的,不断增加的数据类型是您的最佳选择 - INT或BIGINT作为您的默认选项。

默认情况下,SQL Server表上的主键也用作群集键 - 但这不一定是这样!在将以前的基于GUID的主群集密钥分解为两个单独的密钥 - GUID上的主(逻辑)密钥和单独的INT IDENTITY上的群集(排序)密钥时,我个人看起来随着时间的推移而获得了巨大的性能提升。 ,1)专栏。

索引碎片降至最低水平,因此索引寻求性能提升 - 强烈推荐!

马克

答案 2 :(得分:2)

不使用GUID的一个重要原因是它们对索引页面的填充率很差 - 这种误用会大大增加您的I / O性能成本。 GUID应保留为AK,而是尽可能使用int派生的PK驱动查询。

答案 3 :(得分:0)

对于32位处理器,int可能是最有效的处理大小。

答案 4 :(得分:0)

unsigned int以满足您特定需求的大小

答案 5 :(得分:0)

GUID / UUID是表的唯一主键的最佳字段类型。