我最近在考慮將GUID作爲主鍵,並提醒我們曾經遇到過最嚴重的錯誤使用:使用字符數據代表GUID主鍵的反模式有多常見?
該數據庫包含很多Entity-Detail父子關係,如Receipt,它具有了LineItem。大多數細節表(本例中爲LineItem)使用GUID主鍵。但不是使用MSSQL的uniqueidentifier
類型進行存儲,而是以'{00000000-0000-0000-0000-000000000000}'
的形式存儲爲38個字符的字符串。哦,他們幾乎總是在nvarchar
(Unicode)列中,每個字節以76字節爲單位(而不是唯一標識符的16字節)。
這些字段多久加入一次?幾乎在系統中的每一個查詢。數百個客戶端數據庫,數百萬條記錄適合這個配置文件。壞。
在引入uniqueidentifier時,系統在我的記憶中並沒有在SQL Server 7.0之前。這只是導致這個問題的知識/研究的徹底失敗。
我有兩個問題:
如何常見的,在你的經驗,這是反模式?
似乎很明顯76字節的Unicode字符串上的連接會比16字節的二進制數字上的連接速度慢很多,帶有索引或不帶。但任何人都可以提供一個想法,這可能會帶來什麼性能?假定您在兩種情況下編入連接列。
你可以在幾秒鐘內通過google搜索出來! – dontWatchMyProfile 2011-11-23 19:57:51
@dontWatchMyProfile嘿,一個被動的downvote!你有多成熟。請注意downvote按鈕上的文字 - 「這個問題沒有顯示任何研究成果」 - 如果你想知道爲什麼我低估了你的問題。 :) – 2011-11-23 20:02:06