uniqueidentifier(什么是uniqueidentifier)
一、uniqueidentifier数据类型的缺点
使用Uniqueidentifier的数据类型的缺点
1对于生成的Uniqueidentifier类型的值来讲,是无序
在正常显示相关的数据信息的时候,返回的信息是无序的
对于 Identity为标识的数据显示的时候,默认的情况下是根据添加记录的顺序来显示的
这样,对于uniqueidentifier为主键的信息集,还是需要一个默认标识排序的字段。
2对于Uniqueidentifier字段来讲,数据的实际信息为16个字节,相对而言比Identity大的多,相对来讲存储空间和查询的效率会降低很多。
二、数据库里字段是uniqueidentifier类型的,怎么操作
SQL Server为我们提供了UniqueIdentifier数据类型,并提供了一个生成函数NEWID(),使用NEWID()可以生成一个唯一的UniqueIdentifier。UniqueIdentifier在数据库中占用16个字节,出现重复的概率非常小,以至于可以认为是0。我们经常从注册表中看到类似
{45F0EB02-0727-4F2E-AAB5-E8AEDEE0CEC5}
的东西实际上就是一个UniqueIdentifier,Windows用它来做COM组件以及接口的标识,防止出现重复。在.NET里管UniqueIdentifier称之为GUID(Global Unique Identifier)。在C#中可以使用如下命令生成一个GUID:
Guid u= System.Guid.NewGuid();
对于上面提到的Order与OrderDetail的程序,如果选用UniqueIdentifier作为主键的话,我们完全可以避免上面提到的增加网络RoundTrip的问题。通过程序直接生成GUID填充主键,不用考虑是否会出现重复。
UniqueIdentifier字段也存在严重的缺陷:首先,它的长度是16字节,是整数的4倍长,会占用大量存储空间。更为严重的是,UniqueIdentifier的生成毫无规律可言,要想在上面建立索引(绝大多数数据库在主键上都有索引)是一个非常耗时的操作。有人做过实验,插入同样的数据量,使用UniqueIdentifier型数据做主键要比使用Integer型数据慢,所以,出于效率考虑,尽可能避免使用UniqueIdentifier型数据库作为主键键值。
三、uniqueidentifier数据类型的优点
使用 Uniqueidentifier数据类型的主要的优点
Uniqueidentifier数据类型主要的优点是在使用newid函数生成值的时候是可以保证值的全球唯一性
可以唯一的标识单行的记录对于多库(尤其是多机器,多网段的数据库的复制)来将比IDEntity来的更有效
其次在使用Identity的情况下,我们对自动生成的值是不能修改的,而Uniqueidentifier数据类型是可以随时修改的