【发布时间】:2012-08-08 12:30:13
【问题描述】:
我有一些继承代码,每次创建实体时都会调用SELECT SYS_GUID() FROM DUAL。这意味着每次插入都会调用两次 Oracle,一次用于获取 Guid,另一次用于插入数据。
我认为这可能有一个很好的理由,例如 - Oracle 的 Guid 可能会通过顺序进行大量插入优化,因此他们可能试图避免过度的索引树重新平衡。
是否有理由使用SYS_GUID 而不是在客户端上构建自己的Guid?
【问题讨论】:
-
我可以换一种说法吗?当有本机实现时,您可能不应该构建自己的 GUID。这不是必须使用
sys_guid()的理由。它比使用序列要慢得多,并且是原始数据类型,使用起来比简单的数字更烦人。如果这仅在一个数据库中,为什么您不能对所有内容都使用单个序列? -
我应该清楚,我所知道的客户端上使用的所有语言都有 GUID 类型。因此,C# 中的新 Guid 由 Guid.NewGuid() 创建,而在 java 中,相同的 Guid 由 UUID.ramdomUUID() 创建。当我说“构建我自己的”时,我并不是指编写大量代码,而是创建一个新的 Guid。由于 Guid 保证是唯一的,因此不应影响它们的创建位置。这个问题仅与在 Oracle 中创建 Guid 相对于客户端的相对好处有关。我知道有(以编程方式昂贵)在插入时在 Oracle 中创建 guid 的方法
标签: oracle primary-key guid