为什么Guid.ToString()方法会颠倒字节顺序?

9
我们在MS SQL数据库中存储一些Guid。有些旧代码使用`Guid.ToString()`并将其作为`varchar(64)`传递,而一些较新的代码使用唯一标识符参数进行传递。当您使用MS SQL Management Studio查看结果时,它们看起来不同。前三个块的字节顺序被颠倒,但最后一个保持不变。为什么会这样呢?
1个回答

9

在Sql Server中,唯一标识符字段可以被索引,因此是“反向”的。

Guid可以从机器特定信息和“事件时间”信息生成。

.Net中的默认Guid是随机的,但你可以通过外部调用从中获取连续的Guid:

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

这将根据您的MAC地址 (MSDN文档) 为您获取基于Guids的序列。
如果您对这些连续的Guid使用.ToString(),则会看到字符串的第一部分变化,而其余部分保持不变。
这使得Guids之间的相等性检查更快(因为差异在开头),并改善了缩短的变化。
对于搜索SqlServer中的列,它类似于电话簿或字典构建索引。与查找以“Over*”开头的单词相比,查找以“*flow”结尾的单词要快得多。
这意味着对于Sql server,任何连续的Guids需要存储重复值的第一个,因此将它们反向存储。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接