我们使用 GUID 作为主键,您知道默认情况下它是集群的。
将新行插入表中时,它将插入表中的随机页(因为 GUID 是随机的)。这会对性能产生可衡量的影响,因为数据库始终会分割数据页(碎片)。但我使用顺序 GUID 的主要原因是因为我希望将新行插入到表中的最后一行...这在调试时会有所帮助。
我可以在上面创建一个聚集索引CreateDate
,但是我们的数据库是自动生成的,并且正在开发中,我们需要做一些额外的事情来促进这一点。还,CreateDate
不是聚集索引的良好候选者。
当年我用过吉米·尼尔森 COMB http://www.informit.com/articles/article.aspx?p=25862,但我想知道 .NET 框架中是否有这样的东西。 Microsoft 在 SQL 2005 中引入了newsequentialid()
作为替代newid()
,所以我希望他们能制作一个 .NET 等效版本,因为我们在代码中生成了 ID。
PS:请不要开始讨论这是对是错,因为 GUID 应该是唯一的等。
应该可以使用对 UuidCreateSequential 的 API 调用在 c# 或 vb.net 中创建顺序 GUID。下面的 API 声明 (C#) 取自Pinvoke.net http://www.pinvoke.net/default.aspx/rpcrt4/UuidCreateSequential.html您还可以在其中找到如何调用该函数的完整示例。
[DllImport("rpcrt4.dll", SetLastError=true)]
static extern int UuidCreateSequential(out Guid guid);
与UuidCreateSequential函数相关的MSDN文章可以是在这里找到 http://msdn.microsoft.com/en-us/library/aa379322.aspx其中包括使用的先决条件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)