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

问题描述 投票:39回答:6

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

  1. INT
  2. BIGINT
  3. 数字
  4. 浮动
sql-server database-design types
6个回答
52
投票

一般来说,int

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

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

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


21
投票

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

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

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

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

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


2
投票

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


0
投票

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


0
投票

unsigned int,满足您的特殊需求


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.