为什么Guid.ToString()反转字节顺序?

时间:2020-03-05 18:41:02  来源:igfitidea点击:

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

解决方案

回答

可以为Sql Server中的Uniqueidentifier字段建立索引,"向后"也可以建立索引。

可以从机器特定信息和"事件时间"信息中生成指导。

.Net中的默认Guid是随机的,但是我们可以通过外部调用从中获得顺序的Guid:

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

这将为我们提供基于顺序的MAC地址(MSDN文档)的指南。

如果我们使用.ToString()这些顺序向导,那么我们会看到字符串的第一部分有所不同,而其余部分保持不变。

这样可以更快地检查Guid之间的相等性(因为差异会在开始时出现),并改善了截断的差异。

为了搜索列,SqlServer以类似于电话目录或者字典的方式构建索引。搜索以" Over *"开头的单词比查找以" * flow"结尾的单词要快得多。

这意味着对于Sql Server,任何顺序的Guid都需要首先与重复值一起存储,因此它将它们存储回去。