SQL Server 什么情况下用自增列?

时间:2022-11-04 20:56:55
网上看来看去就只有“SQL Server 如何设置自增列”,却没有文章分析自增列在什么情况下需要,什么情况下多余,然后归类出需要的和不需要的情况。

求讨论~求点明~

12 个解决方案

#1


自增列在查询的时候比较有用 因为是INT的 所以占用空间少 查询效率高

#2


这个主要是需求的应用上了。

就好比钳子,可以开瓶盖,可以拔钉子,等等。很多应用的方法。 

自增通常是给一个唯一ID最为方便。不用自己写增量算法。
如果本身别的字段就可以完全作为主键唯一。我个人觉得自增的ID可以不用。(当然很多人还是加上来防止恶意删除的判定手段,断号!)当然,这个也是得看应用具体需求的。

更多的场景还是得具体分析。lz可以从实践中多应用应用即可。

不要限制,当年发现无线电的时候,没人知道要干点儿啥对吧。呵呵,参考。

#3


不会扩展为多系统合并的系统,都可以放心地使用自增字段

#4


如果表中不设置主键,建议可以设置自增列,在查询的时候会提高效率。大多情况下,是否设置自增列还是需要根据实际情况而定的。

#5


你自己考虑过什么时候使用没?

#6


there is no single true answer for this questions. 

#7


引用 5 楼 DBA_Huangzj 的回复:
你自己考虑过什么时候使用没?


我是觉得表的数据量大的时候查询方便

但发觉自己用的时候总是不自觉的加上自增列,如果一个表是那种基础信息固定几个记录的表

比如Table1,只有固定的五行数据,四列
1,CodeA,NameA,DescA
2,CodeB,NameB,DescB
3,CodeC,NameC,DescC
4,CodeD,NameD,DescD
5,CodeE,NameE,DescE

以后也不会大量增加数据了,甚至会一直就这5条数据,这个时候觉得自增列很多余....

#8


自增列和数据量不是非常有关系,但是往往也业务逻辑有关系,有些表,可以找到主键,但是主键可能是非常长的数据类型,比如varchar(200),这些即使做主键性能也不高,这时候可以考虑用代理键,自增列是比较不错的代理键,但是自增有一些限制,所以用的时候最好考虑一下会不会出现,如何应对出现,常见限制有:
1、单表,identity只存在于单表。
2、可能断号,如果delete了中间一行数据下一行就不连续了。
3、高并发操作过程中,获取上一个自增号是否有问题

#9


引用 8 楼 DBA_Huangzj 的回复:
自增列和数据量不是非常有关系,但是往往也业务逻辑有关系,有些表,可以找到主键,但是主键可能是非常长的数据类型,比如varchar(200),这些即使做主键性能也不高,这时候可以考虑用代理键,自增列是比较不错的代理键,但是自增有一些限制,所以用的时候最好考虑一下会不会出现,如何应对出现,常见限制有:
1、单表,identity只存在于单表。
2、可能断号,如果delete了中间一行数据下一行就不连续了。
3、高并发操作过程中,获取上一个自增号是否有问题

说的很详细,进来学习!

#10


具体问题具体分析了
需要时:如果写代码是用代码机器人产生的,估计每个表都要加自增列了;C#删除时好定位(对于多个字段联合作主键时);没有字段作主键,去重时很方便
不需要时:有其他字段作主键时可以不用

#11


非常感谢各位的回答~

我已经对自增列的使用有一些感想了~

结帖给分吧 SQL Server 什么情况下用自增列?

#12


有兴趣可以看看我的文章: http://blog.csdn.net/dba_huangzj/article/details/7685162

#1


自增列在查询的时候比较有用 因为是INT的 所以占用空间少 查询效率高

#2


这个主要是需求的应用上了。

就好比钳子,可以开瓶盖,可以拔钉子,等等。很多应用的方法。 

自增通常是给一个唯一ID最为方便。不用自己写增量算法。
如果本身别的字段就可以完全作为主键唯一。我个人觉得自增的ID可以不用。(当然很多人还是加上来防止恶意删除的判定手段,断号!)当然,这个也是得看应用具体需求的。

更多的场景还是得具体分析。lz可以从实践中多应用应用即可。

不要限制,当年发现无线电的时候,没人知道要干点儿啥对吧。呵呵,参考。

#3


不会扩展为多系统合并的系统,都可以放心地使用自增字段

#4


如果表中不设置主键,建议可以设置自增列,在查询的时候会提高效率。大多情况下,是否设置自增列还是需要根据实际情况而定的。

#5


你自己考虑过什么时候使用没?

#6


there is no single true answer for this questions. 

#7


引用 5 楼 DBA_Huangzj 的回复:
你自己考虑过什么时候使用没?


我是觉得表的数据量大的时候查询方便

但发觉自己用的时候总是不自觉的加上自增列,如果一个表是那种基础信息固定几个记录的表

比如Table1,只有固定的五行数据,四列
1,CodeA,NameA,DescA
2,CodeB,NameB,DescB
3,CodeC,NameC,DescC
4,CodeD,NameD,DescD
5,CodeE,NameE,DescE

以后也不会大量增加数据了,甚至会一直就这5条数据,这个时候觉得自增列很多余....

#8


自增列和数据量不是非常有关系,但是往往也业务逻辑有关系,有些表,可以找到主键,但是主键可能是非常长的数据类型,比如varchar(200),这些即使做主键性能也不高,这时候可以考虑用代理键,自增列是比较不错的代理键,但是自增有一些限制,所以用的时候最好考虑一下会不会出现,如何应对出现,常见限制有:
1、单表,identity只存在于单表。
2、可能断号,如果delete了中间一行数据下一行就不连续了。
3、高并发操作过程中,获取上一个自增号是否有问题

#9


引用 8 楼 DBA_Huangzj 的回复:
自增列和数据量不是非常有关系,但是往往也业务逻辑有关系,有些表,可以找到主键,但是主键可能是非常长的数据类型,比如varchar(200),这些即使做主键性能也不高,这时候可以考虑用代理键,自增列是比较不错的代理键,但是自增有一些限制,所以用的时候最好考虑一下会不会出现,如何应对出现,常见限制有:
1、单表,identity只存在于单表。
2、可能断号,如果delete了中间一行数据下一行就不连续了。
3、高并发操作过程中,获取上一个自增号是否有问题

说的很详细,进来学习!

#10


具体问题具体分析了
需要时:如果写代码是用代码机器人产生的,估计每个表都要加自增列了;C#删除时好定位(对于多个字段联合作主键时);没有字段作主键,去重时很方便
不需要时:有其他字段作主键时可以不用

#11


非常感谢各位的回答~

我已经对自增列的使用有一些感想了~

结帖给分吧 SQL Server 什么情况下用自增列?

#12


有兴趣可以看看我的文章: http://blog.csdn.net/dba_huangzj/article/details/7685162