Sql server 主键的Sql数据类型-Sql Server?
我们应该使用哪种sql数据类型作为基数主键:Sql server 主键的Sql数据类型-Sql Server?,sql-server,database-design,types,Sql Server,Database Design,Types,我们应该使用哪种sql数据类型作为基数主键: int 比基特 数字的 浮动 通常,int bigint如果你认为你的行数会超过宇宙中的原子数 uniqueidentifier在您需要全局唯一键时非常有用(这些键保证在模式中的所有表中都是唯一的,甚至可能是全局唯一的(我不记得了)) 另外两个我不想使用它们不是整数类型(它们有分数,作为键没有多大意义)不在PKs中使用GUI的一个重要原因是它们对索引页的填充率太高-这种误用会显著增加I/O性能成本。guid应保留为AK,并尽可能使用int派生的PK来
通常,
int
bigint
如果你认为你的行数会超过宇宙中的原子数
uniqueidentifier
在您需要全局唯一键时非常有用(这些键保证在模式中的所有表中都是唯一的,甚至可能是全局唯一的(我不记得了))
另外两个我不想使用它们不是整数类型(它们有分数,作为键没有多大意义)不在PKs中使用GUI的一个重要原因是它们对索引页的填充率太高-这种误用会显著增加I/O性能成本。guid应保留为AK,并尽可能使用int派生的PK来驱动查询。对于32位处理器,int可能是最有效的处理大小。您确实需要将两个问题分开: 1) 主键是一个逻辑结构—唯一且可靠地标识表中某一行的候选键之一。这可以是任何东西,真的-一个INT,一个GUID,一个字符串-选择对您的场景最有意义的内容 2) 集群键(表中定义“集群索引”的一列或多列)-这是一个与物理存储相关的东西,在这里,一个小的、稳定的、不断增加的数据类型是您最好的选择-INT或BIGINT作为默认选项 默认情况下,SQL Server表上的主键也用作集群键-但不需要这样!我个人认为,随着时间的推移,将以前基于GUID的主聚集键拆分为两个单独的键时,性能会有很大的提高—GUID上的主(逻辑)键和单独的INT-IDENTITY(1,1)列上的聚集(排序)键 索引碎片已降至最低级别,因此索引搜索性能得到提升-强烈推荐
Marc
unsigned int
符合您特定需求的大小宇宙中的行数大于原子数
表示uint64的最大值,但有时您只需要使用bigint超过uint32的最大值。在实践中您可能会遇到两个例子:每个活着的人的数据记录都超过32位限制;类似地,将IPv6地址转换为uint需要48位(我喜欢使用其他16位作为标志或有时使用低分辨率时间戳;])这并不是Ken非常有用答案的要点,但bigint
的64位最大值与宇宙中估计的原子数相差甚远,--大约10^80--即使是256位整数也无法容纳该值。:)@肯斯温特-哈哈哈,宇宙中的行数比原子数多+1!!这确实有点不准确-GUID作为PK是可以的-GUID作为集群键是DeMaster。PK本身对物理数据组织没有影响-这是群集键的工作:)除了SQL server没有未签名的数据类型。是的,完全同意Marc-只是普通人很少看到图表工具之外的东西,而且右键单击、设置PK很容易。。。