Sql-Server
儲存在 varchar 欄位中的 GUID
我繼承了幾個使用 GUID 作為 PK 的數據庫。大多數數據類型不是唯一標識符,而是 varchar(50) 和一些 varchar(100)。欄位是真正的 GUID,有些是由
myID = ‘xxx’ + 轉換 (varchar (40), newID ())
一般來說,它有點亂
這種設計的性能影響是什麼,是否值得重新處理表以轉換數據類型。表通常約為 1/2 M 記錄,其中一對錶在 2-4M 記錄範圍內。
這個問題的推動力是我正在嘗試(未成功)優化一個連接 24 個表和視圖的 proc,而伺服器處理得不是很好。
感謝您的任何見解
一般來說,使用長聚集索引鍵是個壞主意。為此,密鑰是由幾個短列還是幾個長列組成並不重要。這使得每個索引的維護以及對該表上每個索引的讀取訪問都變得更加昂貴。由於 PK 預設由聚集索引強制執行,因此您很可能有一個非常長的聚集索引鍵。
此外,一般來說,讓您的聚集索引鍵單調增加是一個好主意。由於您的列是基於 NEWID 評估的,它會將新行分佈在整個表中,從而導致碎片。超長的密鑰會使情況變得更糟。
最後,一般來說,不要花太多時間搶先調整性能是個好主意。如果您進行新開發,請遵循最佳實踐(如上面的兩個建議)。使用現有軟體,只修復引起頭痛的問題。
現在看起來你已經很頭疼了。因此,我首先將這些主鍵遷移到標識列(首選)或預設為 newsequentialid() 的唯一標識符列。
但是,如果您不能停機,這將是一個困難的改變。在這種情況下,我將首先添加新索引以支持您目前最頭痛的問題(閱讀:儲存過程)。之後再努力收拾爛攤子。