2008-10-21 207 views

回答

9

很难说不知道你正在使用的数据库,最高效的是什么。

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

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

1

望着.NET guid class,有几种方法来初始化一个GUID:

的Guid(的Int32,Int16类型,Int16的,字节,字节,字节,字节,字节,字节,字节,字节) 的Guid(字符串)

尽管从理论上讲,将整数存储在数据库中可能会更有效率(可以使用位移来存储4个32位整数..但是在加载时必须计算出来并节省每一次,此外,它会占用数据库中的4个字段..我想可能最终效率会降低。为了调试/测试的目的,在数据​​库中添加不可能直接读取数据,并且我会说,最好存储一个字符串。它只是一个32字符的字段(如果包含破折号,则为36),并且转换非常容易。 GUID。 ToString()new Guid(stringValue);

+0

32个字符,* 2代表unicode,所以消耗64个字节?二进制(16)更直接,更高效,实际上是数据... – MichaelGG 2008-10-21 07:08:48

2

根据我的经验,分解成两个整数的UUID仍然比使用char字段更有效。不同的DB以不同的方式做出反应。整理也可以在那里有所作为。这就是说,通常在整个应用程序中会出现更大的性能“罪孽”,我认为这对于许多应用程序来说都不是什么大事。你必须根据你的应用程序的这部分内容会有多忙来判断你自己?你需要通过UUID进行绝对最快的查询吗? 600ns vs 400ns对你来说有很大的时差吗?

如果将会有大量的手动sql doen与数据库,然后有一个密钥,包括来自单独的字段的UUID当你需要做一个插入和一个没有数据库默认它的臭味。尽管如此,这也是一个问题。

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