2008-10-21 41 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應該不是什麼大問題。