我应该使用Oracle的sys_guid()来生成guid吗?

cmd*_*tos 4 oracle guid primary-key

我有一些继承的代码,SELECT SYS_GUID() FROM DUAL每次创建实体时调用.这意味着对于每次插入,有两次调用Oracle,一次调用,另一次调用Guid数据.

我认为可能有一个很好的理由,例如 - Oracle的Guids可以通过顺序进行优化以进行高容量插入,因此它们可能试图避免过多的索引树重新平衡.

是否有理由使用SYS_GUID而不是Guid在客户端上构建自己的?

tbo*_*one 7

如果您已经提供给自己,为什么要自己动手.此外,您不需要先抓住然后插入,您只需插入:

create table my_tab
(
val1 raw(16),
val2 varchar2(100)
);

insert into my_tab(val1, val2) values (sys_guid(), 'Some data');
commit;
Run Code Online (Sandbox Code Playgroud)

您还可以将其用作主键的默认值:

drop table my_tab;
create table my_tab
(
val1 raw(16) default sys_guid(),
val2 varchar2(100),
primary key(val1)
);
Run Code Online (Sandbox Code Playgroud)

这里不需要设置一个前插入触发器来使用一个序列(或者在大多数情况下甚至关心val1或它在代码中的填充方式).

序列的维护也更多.更不用说在系统之间移动数据时的可移植性问题.

但是,序列是更人性化的imo(到目前为止,查看和使用数字优于原始值的32十六进制版本).序列可能还有其他好处,我没有做过任何广泛的比较,你可能希望先进行一些性能测试.


cmd*_*tos 1

我发现没有理由从 Oracle 生成 Guid。每个 Guid 的 Oracle 和客户端之间的往返可能比随机值插入时偶尔发生的索引重新平衡慢。