简单总结一下这两种字段的概念
1、自增量字段
自增量字段每次都会按顺序递增,可以保证在一个表里的主键不重复。使用也比较简单,只需在建表时声明为自增属性即可。
自增量的值是需要在系统中维护一个全局的数据值,每次插入数据时即对此值进行增量取值。当在增量产生唯一标识的并发环境中,每次增量取值都必须对此全局值加锁解锁保证增量的唯一性,这可能会牵扯一些性能问题。
2、GUID字段
在MS Sql数据库中可以在建立表结构时指定字段类型为uniqueidentifier,并且其默认值可以使用NewID()来生成唯一的GUID,使用NewID生成的比较随机。如:
insert into Table_Guid(GuidID,Name)values(NEWID(),'Test1')
在Sqlserver2005之后也可以使用NewSequentialid()来顺序生成,好处,在建立索引时就体现出来了,如:
create table mytable(ColA uniqueidentifier default newsequentialid(),col2 varchar(10))
GUID(全局统一标识符):指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的,其算法是通过以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字生成。
下面简单比较一下两种方式的利弊
1、自增量在数据迁移或者导入数据的时候自增量有可能出现重复,分布式数据库中,不同数据库的同名表可能需要进行同步复制,也可能造成值重复。
2、GUID能保证唯一性,所以1中自增量所面临的问题就不在是问题了。
3、GUID的值比较长,占用数据库空间比较多,不过这个在目前看来已不是问题了,另外,就是不好记。
4、性能问题,在网上看到过有人做过测试,使用Guid作主键速度并不是很慢,它反而要比使用自动增长型的增量速度还要快。