2008-08-20 78 views
8

我們將一些Guid存儲在MS SQL數據庫中。有一些遺留代碼會執行Guid.ToString(),然後將它們傳遞給varchar(64),並且有一些更新的代碼使用唯一標識符參數傳遞它們。當您使用MS SQL Management Studio查看結果時,它們看起來不一樣。前三個塊的字節順序是相反的,但最後一個保持不變。爲什麼?爲什麼Guid.ToString()會顛倒字節順序?

回答

8

Sql服務器中的Uniqueidentifier字段可以編入索引,「向後」也是如此。

Guids可以從機器的具體信息和'事件時間'信息中生成。

.NET中的默認GUID是隨機的,但你可以從它那裏得到連續的GUID與一個外部呼叫:

[DllImport("rpcrt4.dll", SetLastError = true)] 
static extern int UuidCreateSequential(out Guid guid); 

這將讓你,是連續的基礎上您的MAC地址(MSDN docs)的GUID。

如果你.ToString()這些連續的GUID,那麼你會看到字符串的第一部分變化,而其餘的保持不變。

這使得Guids之間的平等檢查更快(因爲差異將在開始時)並且改善截斷的差異。

用於搜索列SqlServer以類似於電話簿或字典的方式構建索引。搜索以「Over *」開頭的單詞比找到以「* flow」結尾的單詞要快得多。

這意味着對於Sql服務器,任何連續的Guid都需要先存儲重複值,以便將它們存儲在前面。