当前位置:  开发笔记 > 数据库 > 正文

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

如何解决《主键的SQL数据类型-SQLServer?》经验,为你挑选了2个好方法。

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

    INT

    BIGINT

    数字

    浮动

Ken Gentle.. 56

一般来说,int.

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

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

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



1> Ken Gentle..:

一般来说,int.

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

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

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


如果选择uniqueidentifier,请考虑将其设置为NONCLUSTERED主键,否则插入可能会出现性能问题.
@KenGentle - 很好的答案,但如果你有超过4,294,967,296行,bigint仍然有用."比宇宙中的原子更多的行"指的是uint64的*MAX*,但有时你只需要使用bigint超过uint32的最大值.实践中可能遇到的两个例子:每个活着的人的数据记录超过32位限制; 类似地,将IPv6地址转换为uint需要48位(我喜欢使用其他16位用于标志或有时使用低分辨率时间戳;])
int仅限于'仅'约20亿.我已经通过一些日志记录功能达到了这个限制;)
并不是说这是肯非常有用的答案的重点,但是'bigint`的64位最大值远远不是宇宙中估计的原子数,大约10 ^ 80 - 这甚至不适合一个256位的整数.:)

2> marc_s..:

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

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

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

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

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

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有