4

在没有本机 UUID/GUID 数据类型的数据库中存储 UUID/GUID 的最有效数据类型是什么?2 BIGINT?

将 GUID 转换为该类型以及从 GUID 转换为该类型的最有效代码(首选 C#)是什么?

谢谢。

4

3 回答 3

9

如果不知道您正在使用的数据库,很难说什么是最有效的。

我的第一个倾向是使用binary(16)列。

至于在 C# 中使用该值,该System.Guid类型有一个接受byte[]数组的构造函数和一个ToByteArray()返回字节数组的方法。

于 2008-10-21T07:01:46.880 回答
2

根据我的经验,将 UUID 分成两个整数仍然比使用 char 字段更有效。但是,不同的数据库以不同的方式做出反应。校对也可以在那里有所作为。话虽如此,整个应用程序通常都有更大的性能“罪过”,我认为这对许多应用程序来说都不是一件大事。您必须根据您的应用程序的这部分会变得多忙来判断自己?您是否需要通过 UUID 进行绝对最快的查询?600ns 和 400ns 对你来说有很大的时间差异吗?

如果要使用 db 执行大量手动 sql,那么当您需要进行插入并且没有 db 默认值时,拥有一个包含来自不同字段的 UUID 的键会很臭。不过,这也是字符的问题。

如果你有一个数据库抽象层,那么组合多个表字段来获取你的 UUID 应该没什么大不了的。

于 2008-10-21T04:28:00.933 回答
1

查看.NET guid 类,有几种初始化 guid 的方法:

Guid(Int32,Int16,Int16,字节,字节,字节,字节,字节,字节,字节,字节) Guid(字符串)

虽然理论上将整数存储在数据库中可能更有效(您可以使用位移来真正存储 4 个 32 位整数。但每次加载和保存时都必须计算出来。另外,它将在数据库中占用 4 个字段。我想它最终会降低效率。

加上为了调试/测试目的而直接在数据库中读取它的可能性,我会说最好存储一个字符串。它只是一个 32 个字符的字段(如果包含破折号,则为 36 个),并且很容易转换。指导。ToString()新 Guid(stringValue);

于 2008-10-21T04:06:41.820 回答