2008-08-20 61 views
8

我们将一些Guid存储在MS SQL数据库中。有一些遗留代码会执行Guid.ToString(),然后将它们传递给varchar(64),并且有一些更新的代码使用唯一标识符参数传递它们。当您使用MS SQL Management Studio查看结果时,它们看起来不一样。前三个块的字节顺序是相反的,但最后一个保持不变。为什么?为什么Guid.ToString()会颠倒字节顺序?

回答

8

Sql服务器中的Uniqueidentifier字段可以编入索引,“向后”也是如此。

Guids可以从机器的具体信息和'事件时间'信息中生成。

.NET中的默认GUID是随机的,但你可以从它那里得到连续的GUID与一个外部呼叫:

[DllImport("rpcrt4.dll", SetLastError = true)] 
static extern int UuidCreateSequential(out Guid guid); 

这将让你,是连续的基础上您的MAC地址(MSDN docs)的GUID。

如果你.ToString()这些连续的GUID,那么你会看到字符串的第一部分变化,而其余的保持不变。

这使得Guids之间的平等检查更快(因为差异将在开始时)并且改善截断的差异。

用于搜索列SqlServer以类似于电话簿或字典的方式构建索引。搜索以“Over *”开头的单词比找到以“* flow”结尾的单词要快得多。

这意味着对于Sql服务器,任何连续的Guid都需要先存储重复值,以便将它们存储在前面。