除了本机UUID之外,数据库中UUID的最有效数据类型

时间:2008-10-21 03:48:11

标签: c# database database-design guid uuid

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

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

感谢。

3 个答案:

答案 0 :(得分:9)

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

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

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

答案 1 :(得分:2)

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

如果db会有很多手动sql doen,那么当你需要进行插入并且没有db默认值时,让一个包含来自不同字段的UUID的密钥有点臭。这也是chars的一个问题。

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

答案 2 :(得分:1)

查看.NET guid class,有几种方法可以初始化guid:

Guid(Int32,Int16,Int16,Byte,Byte,Byte,Byte,Byte,Byte,Byte,Byte) GUID(字符串)

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

添加不可能直接在数据库中读取它以进行调试/测试,我会说最好存储一个字符串。它只有一个32个字符的字段(如果包含破折号,则为36个字段),并且转换非常容易。 guid。ToString()new Guid(stringValue);