首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我应该使用Oracle的sys_guid()来生成guids吗?

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

Stack Overflow用户
提问于 2012-08-08 20:30:13
回答 3查看 19.5K关注 0票数 4

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

我认为这可能有一个很好的理由,例如,Oracle的Guids可能会针对大容量插入进行优化,因此它们可能会试图避免过度的索引树重新平衡。

有没有理由使用SYS_GUID而不是在客户机上构建您自己的Guid

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-05 23:32:14

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

票数 1
EN

Stack Overflow用户

发布于 2012-08-08 20:58:08

如果你已经准备好了,为什么还要使用你自己的。而且,你不需要先抓取它,然后再插入,你可以直接插入:

代码语言:javascript
复制
create table my_tab
(
val1 raw(16),
val2 varchar2(100)
);

insert into my_tab(val1, val2) values (sys_guid(), 'Some data');
commit;

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

代码语言:javascript
复制
drop table my_tab;
create table my_tab
(
val1 raw(16) default sys_guid(),
val2 varchar2(100),
primary key(val1)
);

这里不需要设置before insert触发器来使用序列(或者在大多数情况下,甚至不需要关心val1或它在代码中是如何填充的)。

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

但是,序列对人类更友好(到目前为止,查看并使用数字比原始值的32进制版本更好)。序列可能还有其他好处,我还没有做任何广泛的比较,您可能希望先运行一些性能测试。

票数 7
EN

Stack Overflow用户

发布于 2012-08-08 20:41:59

如果您关心的是两个数据库调用,那么您应该能够在INSERT语句中调用SYS_GUID()。您甚至可以使用Oracle子句来获取RETURNING生成的值,以便在应用程序中使用它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11864575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档