我陷入了一片混亂,並期待看看我能否擺脫困境。我有一個數據庫,其中包含uniqueidentifier列上定義的表上的所有主鍵。這是對我們的強迫,給予'安全'作爲其中一個原因。另一個我認爲比較有價值的理由是有些表參與複製。如何擺脫作爲主鍵的guid字段
我在審查數據庫,我覺得一個容易避免的未來性能瓶頸是可以在所有表中添加自動增量bigint列並使其成爲主鍵(集羣)。並以某種方式正確地「附加」pk-fk關係。但仍然保留舊的列以備將來使用。
在這方面的任何建議/意見/ donots?我們是一個C#/ MSSQL服務器R2/Linq環境。
編輯: 看看評論,我意識到我遺漏了一些重要的細節。 所有的主鍵Guid字段都是集羣的,並且我沒有使用newsequentialId(我們使用Linq to SQL,主鍵是生成客戶端的,在涉及複製的情況下,我們不確定如何從不同的客戶端環境正確生成順序標識符沒有衝突)。
我的'感覺'是由於已知的事實,即guid列上的聚集索引將導致高度的碎片化並且只會隨着數據庫的增長而惡化情況。另外,我現在不是真的在嘗試優化,而是試圖糾正一個糟糕的設計,以避免數據庫變得太大時將來的頭痛。想知道現在是否值得去做。
有益的討論也與這裏的問題this post,並且 another
'我覺得一個容易避免性能瓶頸是可以添加自動遞增bigint',有點意見。不要優化感覺。 –
基準您的數據庫。用'BIGINT'將數據複製到另一個表中,看看性能損失是否真的是一個問題。 – Romoku
p.s.這可能是更好的http://dba.stackexchange.com/ –