將UUID/GUID存儲在沒有本機UUID/GUID數據類型的數據庫中的最有效數據類型是什麼? 2 BIGINTs?除了本地UUID之外,數據庫中UUID的最有效數據類型
什麼是最有效的代碼(C#首選)轉換爲和從一個GUID到該類型?
謝謝。
將UUID/GUID存儲在沒有本機UUID/GUID數據類型的數據庫中的最有效數據類型是什麼? 2 BIGINTs?除了本地UUID之外,數據庫中UUID的最有效數據類型
什麼是最有效的代碼(C#首選)轉換爲和從一個GUID到該類型?
謝謝。
很難說不知道你正在使用的數據庫,最高效的是什麼。
我的第一個傾向將是使用binary(16)
列。
至於在C#中使用該值,System.Guid
類型的構造函數接受byte[]
數組,並返回字節數組的方法ToByteArray()
。
望着.NET guid class,有幾種方法來初始化一個GUID:
的Guid(的Int32,Int16類型,Int16的,字節,字節,字節,字節,字節,字節,字節,字節) 的Guid(字符串)
儘管從理論上講,將整數存儲在數據庫中可能會更有效率(可以使用位移來存儲4個32位整數..但是在加載時必須計算出來並節省每一次,此外,它會佔用數據庫中的4個字段..我想可能最終效率會降低。爲了調試/測試的目的,在數據庫中添加不可能直接讀取數據,並且我會說,最好存儲一個字符串。它只是一個32字符的字段(如果包含破折號,則爲36),並且轉換非常容易。 GUID。 ToString()和new Guid(stringValue);
根據我的經驗,分解成兩個整數的UUID仍然比使用char字段更有效。不同的DB以不同的方式做出反應。整理也可以在那裏有所作爲。這就是說,通常在整個應用程序中會出現更大的性能「罪孽」,我認爲這對於許多應用程序來說都不是什麼大事。你必須根據你的應用程序的這部分內容會有多忙來判斷你自己?你需要通過UUID進行絕對最快的查詢嗎? 600ns vs 400ns對你來說有很大的時差嗎?
如果將會有大量的手動sql doen與數據庫,然後有一個密鑰,包括來自單獨的字段的UUID當你需要做一個插入和一個沒有數據庫默認它的臭味。儘管如此,這也是一個問題。
如果你有一個數據庫抽象層,那麼組合多個表字段來獲得你的UUID應該不是什麼大問題。
32個字符,* 2代表unicode,所以消耗64個字節?二進制(16)更直接,更高效,實際上是數據... – MichaelGG 2008-10-21 07:08:48