6

我们正在从 C# Guid.NewGuid() random-ish guid 生成器切换到本文中建议的顺序 guid算法。虽然这似乎适用于 MS SQL Server,但我不确定对 Oracle 数据库的影响,我们将 guid 存储在 raw(16) 字段中。有没有人知道这个算法是否适合为 Oracle 和 MS SQL Server 创建顺序 guid,或者是否应该使用不同的变体。

谢谢!

4

2 回答 2

2

对于 GUID,使用 raw(16) 似乎是一种合理的数据类型。原始数据类型的最大大小为 2000 字节,并且在 Oracle 9i、10g 和 11 中受支持。

还有一个用于生成 GUID 的 sql 函数,称为 SYS_GUID。请参阅此处的文档-> http://www.stanford.edu/dept/itss/docs/oracle/10g/server.101/b10759/functions153.htm

您可能对这篇文章感兴趣 -> http://feuerthoughts.blogspot.com/2006/02/watch-out-for-sequential-oracle-guids.html

于 2010-04-07T11:51:19.373 回答
1

当一个索引块对于另一个条目来说“太满”时,它会被拆分。

Oracle 有两条路径,一条针对“顺序”样式值进行优化,一条针对“随机”类型值进行优化。如果新条目位于索引的最右端,则会得到 90-10 的拆分。如果它在中间的某个地方,你会得到 50-50。如果您希望“新”值在索引中聚集在一起,那么顺序值很有用。如果您希望它们分散(例如,避免对“热”块的争用),那么随机值很有用。

该技术对 Oracle 是否“好”取决于您要解决的问题。

于 2010-04-08T00:30:03.873 回答