我们应该使用哪种sql数据类型作为数字基本主键:
一般来说,int
。
bigint
如果你认为你的行数比宇宙中的原子多。
如果您需要全局唯一键(在模式中所有表中保证唯一的键,甚至可能是普遍唯一的(我不记得)),uniqueidentifier
非常有用
另外两个我不会使用它们不是整数类型(它们有分数,它们作为键没有多大意义)
你真的需要分开两个不同的问题:
1)主键是一个逻辑结构 - 唯一且可靠地标识表中一行的关键候选之一。这可以是任何东西,真的 - 一个INT,一个GUID,一个字符串 - 选择对你的场景最有意义的东西。
2)聚类键(在表上定义“聚簇索引”的一列或多列) - 这是一个与物理存储相关的东西,这里,一个小的,稳定的,不断增加的数据类型是你最好的选择 - INT或BIGINT作为默认选项。
默认情况下,SQL Server表上的主键也用作群集键 - 但这不一定是这样!在将以前的基于GUID的主群集密钥分解为两个单独的密钥 - GUID上的主(逻辑)密钥和单独的INT IDENTITY上的群集(排序)密钥时,我个人似乎随着时间的推移而获得了巨大的性能提升。 ,1)专栏。
索引碎片降至最低水平,因此索引寻求性能提升 - 强烈推荐!
渣
不使用GUID的一个重要原因是它们对索引页面的填充率很差 - 这种误用可能会大大增加您的I / O性能成本。 GUID应保留为AK,而是尽可能使用int派生的PK驱动查询。
对于32位处理器,int可能是最有效的处理大小。
unsigned int
,满足您的特殊需求
GUID / UUID是表的唯一主键的最佳字段类型。