NEWSEQUENTIALID (Transact-SQL)
适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例
在启动 Windows 后在指定计算机上创建大于先前通过该函数生成的任何 GUID 的 GUID。 在重新启动 Windows 后,GUID 可以再次从一个较低的范围开始,但仍是全局唯一的。 在 GUID 列用作行标识符时,使用 NEWSEQUENTIALID 可能比使用 NEWID 函数的速度更快。 其原因在于,NEWID 函数导致随机行为并且使用更少的缓存数据页。 使用 NEWSEQUENTIALID 还有助于完全填充数据和索引页。
重要
如果涉及保密问题,则不要使用该函数。 因为有可能猜到下一个生成的 GUID 的值,从而访问与该 GUID 关联的数据。
NEWSEQUENTIALID 是 Windows UuidCreateSequential 函数的包装器,应用了某种字节随机排列。
警告
UuidCreateSequential 函数具有硬件依赖关系。 在 SQL Server 上,当数据库(如包含的数据库)移动到其他计算机时,可以开发顺序值的群集。 在使用 Always On 以及在 SQL 数据库 上时,如果数据库故障转移到另一台计算机,则可以开发顺序值的群集。
语法
NEWSEQUENTIALID ( )
返回类型
uniqueidentifier
注解
NEWSEQUENTIALID() 只能与 uniqueidentifier 类型表列上的 DEFAULT 约束一起使用。 例如:
CREATE TABLE myTable (ColumnA uniqueidentifier DEFAULT NEWSEQUENTIALID());
当 NEWSEQUENTIALID() 用于 DEFAULT 表达式时,不能与其他标量运算符结合使用。 例如,您不能执行以下操作:
CREATE TABLE myTable (ColumnA uniqueidentifier DEFAULT dbo.myfunction(NEWSEQUENTIALID()));
在上一个示例中,myfunction()
是一个由标量用户定义的标题函数,它接受并返回 uniqueidentifier
值。
不能在查询中引用 NEWSEQUENTIALID
可以使用 NEWSEQUENTIALID 生成 GUID 以减少叶级别索引上的页拆分和随机 IO。
使用 NEWSEQUENTIALID 生成的每个 GUID 在该计算机上都是唯一的。 仅当源计算机具有网卡时,使用 NEWSEQUENTIALID 生成的 GUID 在多台计算机上才是唯一的。