我们正在将C# Guid.NewGuid()随机生成的guid生成器切换到顺序guid算法,该算法建议在此帖中使用。虽然这似乎对于MS SQL Server很有效,但我不确定对于Oracle数据库的影响,因为我们在其中将guid存储在raw(16)字段中。是否有人知道这个算法是否适用于为Oracle创建顺序guid以及为MS SQL Server创建顺序guid,或者应该使用其他变体。
谢谢!
谢谢!
使用raw(16)似乎是GUID的合理数据类型。 raw数据类型的最大大小为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
当索引块已经“太满”无法再添加一个条目时,它会被分裂。
Oracle有两种路径,一种针对“顺序”类型的值进行优化,另一种针对“随机”类型的值进行优化。如果新条目要放在索引的最右端,则会进行90-10的分裂。如果它在中间某个位置,则会进行50-50的分裂。如果您想将“新”值聚集在一起以便于索引,则顺序值很有用。如果您希望它们分散(例如避免在“热”块上争用),则随机值很有用。
这种技术是否对Oracle“好”,取决于您试图解决什么问题。