我们正在从C#Guid.NewGuid()random-ish guid生成器切换到this post中建议的顺序guid算法。虽然这似乎适用于MS SQL Server,但我不确定对Oracle数据库的影响,我们将guids存储在raw(16)字段中。有没有人知道这个算法是否适合为Oracle和MS SQL Server创建顺序guid,或者是否应该使用不同的变体。
谢谢!
答案 0 :(得分:2)
使用raw(16)似乎是GUID的合理数据类型。原始数据类型的最大大小为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
答案 1 :(得分:1)
当一个索引块对于另一个条目“太满”时,它将被拆分。
Oracle有两条路径,一条针对“顺序”样式值进行了优化,另一条针对“随机”类型值进行了优化。如果新条目位于索引的最右端,则会得到90-10分割。如果它在中间的某个地方,你得到50-50。如果希望在索引中聚集在一起的“新”值,则顺序值很有用。如果你希望它们分散(例如,为了避免在'热'块上争用),那么随机值是有用的。
该技术对Oracle来说是否“好”取决于您要解决的问题。