UniqueIdentifier 数据类型
UniqueIdentifier 数据类型用于存储GUID的值,占用16Byte。?SQL Server将UniqueIdentifier存储为16字节的二进制数值,Binary(16),按照特定的格式显示,显示的格式是:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,其中,x是16进制数字,数值范围是从0-9,A-F。由于每个字节存储2个16进制数据,因此,按照存储字节,UniqueIdentifier的格式简写为:4B-2B-2B-2B-6B。使用GUID的好处是:在不同的Server上,实现GUID数值的“唯一”,SQL Server保证GUID的值总是唯一的,只在极少数情况下可能会重复。 在SQL Server中,UniqueIdentifier 列的特性:
一,对UniqueIdentifier 变量赋值 1,使用NewID()?为UniqueIdentifier赋值,函数NewID() 用于产生随机的GUID数值。 declare @ui uniqueidentifier set @ui=newid() select @ui 2,使用字符串赋值,字符串的格式是:‘xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx’ declare @ui uniqueidentifier set @ui=‘AA786048-44BB-E511-80E3-F8B156CF6E62‘ select @ui 二,创建UniqueIdentifier column 由于UniqueIdentifier 列不是由系统自动赋值,必须显式赋值,可以为UniqueIdentifier列创建Default约束,并使用GUID产生函数赋值。 例如,在Default约束中使用NewID(),为每行数据生成随机的唯一值 CREATE TABLE dbo.myTable_Rand ( ColumnA uniqueidentifier DEFAULT NewID(),ColumnB int,columnC varchar(10) ) 1,随机的GUID NewID()函数产生的GUID是唯一的,但是,值的大小是随机的,不是一个始终增加的值(ever-increasing value),SQL Sever 不保证产生的GUID比之前的GUID 大或小。如果将NewID()函数产生GUID作为clustered index key,那么新的数据行插入的位置是随机的,这样将导致Page split ,降低 IO 性能。 最佳的clustered index key 应该是递增的(increase),data type is narrow (narrow),值是unique(unique),不会频繁更新(static),NewID() 产生的GUID满足narrow,unique,static,但是不满足increase,因此不是理想中的clustered index key。 2,有序的GUID 在一台指定的服务器上,NewSequentialId() 产生的GUID是有序的,后产生的GUID比先产生的GUID数值要大,也就是说,该函数产生的GUID值是始终增加(ever-increasing value)的,SQL Sever 保证产生的GUID比之前的GUID 大。NewSequentialID()函数只能用于表列的Default约束中。如果将NewSequentialID() 产生的GUID作为clustered index key,那么Insert会将新的row 将插入到table的末尾,避免 page split,推荐使用NewSequentialID()作为clustered index key。
CREATE TABLE dbo.myTable ( ColumnA uniqueidentifier DEFAULT NEWSEQUENTIALID(),columnC varchar(10) ) insert into dbo.myTable(ColumnB,columnC) values(1,‘a‘),(2,‘c‘) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |