VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

NEWSEQUENTIALID

功能描述

Vastbase支持使用NEWSEQUENTIALID函数生成有序UUID。UUID是一个32位的十六进制数据,具有全局唯一性。

返回类型: UUID类型(uniqueidentifier类型

NEWSEQUENTIALID函数的结果依赖有序序列,时间戳等因素生成,呈规律性增长,因此不难推断出下一个值。出于安全性考虑,不建议将NEWSEQUENTIALID函数用在安全要求较高的场景下。

如果在一个UUID类型的字段上建立索引,使用NEWSEQUENTIALID可能比使用NEWID函数的速度更快。使用NEWID产生的新的值是不固定的,而 NEWSEQUENTIALID产生的新的值是有规律的,索引树的变化有规律可循。使用 NEWSEQUENTIALID 生成有序UUID可以减少叶级别索引上的页拆分和随机I/O。

注意事项

  • 该功能仅在数据库兼容模式为SQL Server时支持(即数据库实例初始化时指定DBCOMPATIBILITY='MSSQL')。

  • Vastbase中NEWSEQUENTIALID()结果的生成方案与SQL Server不完全一致,注意区分。

语法格式

NEWSEQUENTIALID()

示例

示例1: 直接调用NEWSEQUENTIALID函数。

select NEWSEQUENTIALID;

返回结果如下:

           newsequentialid
--------------------------------------
 83a77fb4-b577-41be-acd5-9b0502a9a8a5
(1 row)

示例2: 创建一个包含UUID类型的测试表,调用NEWID函数向测试表中插入数据。

1、创建测试表,其中字段col1的数据类型为UUID。

CREATE TABLE table_1827 (
col1 UUID NOT NULL ,
col2 text);

2、向测试表中插入一条数据,调用NEWID函数向col1字段插入UUID数据。

insert into table_1827 values (NEWSEQUENTIALID(),'test');

3、查看测试表数据。

select * from table_1827;

返回结果如下:

                 col1                 | col2
--------------------------------------+------
 83ac321e-f07f-4fe3-bd94-8ceeca8d1e23 | test
(1 row)

示例3: 创建一个包含UUID类型的测试表,指定UUID字段默认值为NEWSEQUENTIALID()。

1、创建测试表emp,其中empno为UUID类型。

CREATE TABLE emp (
empno UUID NOT NULL default NEWSEQUENTIALID(), e_name VARCHAR2(14), loc VARCHAR2(13));

2、向emp表中插入数据,插入时不指定字段empno的值。

INSERT INTO emp(e_name,loc) VALUES ('ACCOUNTING','NEW YORK');
INSERT INTO emp(e_name,loc) VALUES ('RESEARCH','DALLAS');
INSERT INTO emp(e_name,loc) VALUES ('SALES','CHICAGO');
INSERT INTO emp(e_name,loc) VALUES ('OPERATIONS','BOSTON');

3、插入数据时empno字段将自动填充NEWSEQUENTIALID()的结果。查看测试表数据:

select * from emp;

返回结果如下:

                empno                 |   e_name    |   loc
--------------------------------------+------------+----------
 83e437d5-fc4b-4919-85db-857803e2513a | ACCOUNTING | NEW YORK
 83e40d71-824b-4b20-bc65-482aac400cd7 | RESEARCH   | DALLAS
 83e43473-ec76-45b3-8a9b-abddeac00a31 | SALES      | CHICAGO
 83e462be-5cb0-413e-8a31-74a03e9c2070 | OPERATIONS | BOSTON
(4 rows)

示例4: 将NEWSEQUENTIALID的值赋给自定义变量使用。

1、设置参数enable_set_variable_mssql_format为on,表示在SQL Server数据库兼容模式下支持自定义用户变量的功能。

set enable_set_variable_mssql_format=on;

2、将NEWID的值赋给@b_109。

declare @b_109 UUID =NEWSEQUENTIALID();

3、直接查看变量@b_109的值。

select @b_109;

返回结果如下:

                @b_109
--------------------------------------
 83e5ed67-fcb6-42fa-91bf-39b3a00deb7d
(1 row)

示例5: 使用NEWSEQUENTIALID函数查询随机数据。

示例在查询语句中使用了TOP子句来限制查询结果集中返回的行数。

1、创建测试表并插入数据。

create table products (ID UUID default NEWSEQUENTIALID(), name text);
insert into products (name) values('pdt1'),('pdt2'),('pdt3'),('pdt4'),('pdt5'),('pdt6'),('pdt7'),('pdt8'),('pdt9'),('pdt10');

2、使用如下语句进行查询,其含义是从products表中查询随机记录,TOP子句表示仅返回前5条记录。

SELECT TOP 5 ID, Name FROM products ORDER BY NEWSEQUENTIALID();

返回结果是随机的5条数据,例如:

                  id                  | name
--------------------------------------+------
 83e65fd1-7437-44f2-b1f8-0e7cbab04671 | pdt4
 83e65180-bf96-4e0f-93fb-eb29e9ec24f6 | pdt8
 83e63cd0-3955-4e94-8af9-cabed772ef0e | pdt1
 83e6331c-b03e-441d-9b4d-fba467c2faad | pdt6
 83e6ec0c-8584-433c-be66-3959a07127b8 | pdt5
(5 rows)